另一種選擇:
WHILE EXISTS(select 1 FROM #wmsorder)
BEGIN
DELETE TOP (1)
FROM #wmsorder
END
但是,從表中逐一刪除所有記錄可能是一個表現地獄。您可能要考慮使用TRUNCATE TABLE
代替:
TRUNCATE TABLE #wmsorder
另外請注意,每個刪除寫入到數據庫的日誌,同時截斷表不會被寫入日誌的。
測試包含100,000行,刪除行一個接一個的臨時表花了我9秒,而將truncate table立即完成:
-- create and populate sample table
SELECT TOP 100000 IDENTITY(int,1,1) AS Number
INTO #wmsorder
FROM sys.objects s1
CROSS JOIN sys.objects s2
-- delete rows one by one
WHILE EXISTS(select 1 FROM #wmsorder)
BEGIN
DELETE TOP (1)
FROM #wmsorder
END
-- clean up
DROP TABLE #wmsorder
-- create and populate sample table
SELECT TOP 100000 IDENTITY(int,1,1) AS Number
INTO #wmsorder
FROM sys.objects s1
CROSS JOIN sys.objects s2
-- truncate the table
TRUNCATE TABLE #wmsorder
-- clean up
DROP TABLE #wmsorder
我一個接一個地刪除行因爲我試圖擺脫我使用的行。 –
我明白了。在這種情況下,您可能需要重新考慮整個腳本。你可能會發現一個基於集合的方式,無論你如何處理這些數據,而是逐一消耗行。 –