SQL Server 2008上的批量删除(是否有诸如批量复制(bcp)之类的功能用于删除数据?)

在SQL Server中有批量删除的解决方案吗?

我不能使用TRUNCATE,因为我想使用WHERE来限制行。

是否有类似批量复制(bcp)的删除数据的功能?


HUWWW
浏览 782回答 3
3回答

繁花不似锦

没有。您需要带WHERE子句的DELETE:这是标准SQL。您可以做的是批量删除,如下所示:SELECT 'Starting' --sets @@ROWCOUNTWHILE @@ROWCOUNT <> 0&nbsp; &nbsp; DELETE TOP (xxx) MyTable WHERE ...或者,如果您要删除很高比例的行...SELECT col1, col2, ... INTO #Holdingtable&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM MyTable WHERE ..opposite condition..TRUNCATE TABLE MyTableINSERT MyTable (col1, col2, ...)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SELECT col1, col2, ... FROM #Holdingtable

眼眸繁星

如果要删除表的一部分而不是表的一部分,可以做几件事TRUNCATE。您可以将表的一部分选择到新表中,然后将两者切换,如下所示:SELECT *INTO tmp_MyTableFROM MyTableWHERE Key='Value'IF @@ROWCOUNT > 0BEGIN&nbsp; &nbsp; EXEC sp_rename MyTable, old_MyTable, NULL&nbsp; &nbsp; EXEC sp_rename tmp_MyTable, MyTable, NULL&nbsp; &nbsp; TRUNCATE old_MyTable&nbsp;END其次,如果您使用的是分区,则可以在相同的分区方案上创建相同的(空)表。如果该表是根据存档/清除逻辑进行分区的,则可以将一个分区块从主表移至新表,然后截断新表。例如:ALTER TABLE MyTableSWITCH PARTITION 15 TO purge_MyTable PARTITION 2&nbsp;GO;&nbsp;TRUNCATE TABLE purge_MyTable&nbsp;附言 分区在SQL 2005/08 Ent中可用。希望这可以帮助!

慕妹3146593

只是在一个临时表上遇到了类似的问题,该临时表在使用适当的锁进行扩展时遇到了问题。由于相关表只为我们一个地方引用,因此我们只用动态表名查询替换了该引用,该查询是用类似于gbn建议的“ select into”创建的。这是可维护的,因为临时表仅在代码中的一个地方被引用,并且额外的数据库调用和创建表的开销在仓库上下文中是合理的。如果您只有几百条记录或在代码中多次引用该表,则此方法可能不起作用。
打开App,查看更多内容
随时随地看视频慕课网APP