mas*_*ani 15 sql t-sql sql-server sql-server-2008
SQL Server中有批量删除的解决方案吗?
我不能使用TRUNCATE,因为我想使用WHERE来限制行中的行.
是否有类似批量复制(bcp)的删除数据?
gbn*_*gbn 25
没有.
您想要一个带有WHERE子句的DELETE:这是标准SQL.
您可以做的是批量删除,如下所示:
SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
DELETE TOP (xxx) MyTable WHERE ...
Run Code Online (Sandbox Code Playgroud)
或者如果你想删除很高比例的行......
SELECT col1, col2, ... INTO #Holdingtable
FROM MyTable WHERE ..opposite condition..
TRUNCATE TABLE MyTable
INSERT MyTable (col1, col2, ...)
SELECT col1, col2, ... FROM #Holdingtable
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您想删除表的一部分而不是TRUNCATE它,您可以做几件事。
您可以选择表格的一部分到一个新表格中,然后切换两者,如下所示:
SELECT *
INTO tmp_MyTable
FROM MyTable
WHERE Key='Value'
IF @@ROWCOUNT > 0
BEGIN
EXEC sp_rename MyTable, old_MyTable, NULL
EXEC sp_rename tmp_MyTable, MyTable, NULL
TRUNCATE old_MyTable
END
Run Code Online (Sandbox Code Playgroud)
其次,如果您使用分区,您可以在相同的分区方案上创建一个相同的(空)表..如果该表是根据您的归档/清除逻辑进行分区的,您可以将一个分区块从主表移动到新表,然后截断新表.. 例如:
ALTER TABLE MyTable
SWITCH PARTITION 15 TO purge_MyTable PARTITION 2
GO;
TRUNCATE TABLE purge_MyTable
Run Code Online (Sandbox Code Playgroud)
附言。SQL 2005/08 Ent 中提供了分区。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
38190 次 |
| 最近记录: |