-
繁花不似锦
没有。您需要带WHERE子句的DELETE:这是标准SQL。您可以做的是批量删除,如下所示:SELECT 'Starting' --sets @@ROWCOUNTWHILE @@ROWCOUNT <> 0 DELETE TOP (xxx) MyTable WHERE ...或者,如果您要删除很高比例的行...SELECT col1, col2, ... INTO #Holdingtable FROM MyTable WHERE ..opposite condition..TRUNCATE TABLE MyTableINSERT MyTable (col1, col2, ...) SELECT col1, col2, ... FROM #Holdingtable
-
眼眸繁星
如果要删除表的一部分而不是表的一部分,可以做几件事TRUNCATE。您可以将表的一部分选择到新表中,然后将两者切换,如下所示:SELECT *INTO tmp_MyTableFROM MyTableWHERE Key='Value'IF @@ROWCOUNT > 0BEGIN EXEC sp_rename MyTable, old_MyTable, NULL EXEC sp_rename tmp_MyTable, MyTable, NULL TRUNCATE old_MyTable END其次,如果您使用的是分区,则可以在相同的分区方案上创建相同的(空)表。如果该表是根据存档/清除逻辑进行分区的,则可以将一个分区块从主表移至新表,然后截断新表。例如:ALTER TABLE MyTableSWITCH PARTITION 15 TO purge_MyTable PARTITION 2 GO; TRUNCATE TABLE purge_MyTable 附言 分区在SQL 2005/08 Ent中可用。希望这可以帮助!
-
慕妹3146593
只是在一个临时表上遇到了类似的问题,该临时表在使用适当的锁进行扩展时遇到了问题。由于相关表只为我们一个地方引用,因此我们只用动态表名查询替换了该引用,该查询是用类似于gbn建议的“ select into”创建的。这是可维护的,因为临时表仅在代码中的一个地方被引用,并且额外的数据库调用和创建表的开销在仓库上下文中是合理的。如果您只有几百条记录或在代码中多次引用该表,则此方法可能不起作用。