平臺:SQL Server
目標:獲取當前行數并從中減去我想要保留的數量,然后洗掉余數。如果可以的話,我打算把它變成一個存盤程序。
對于代碼,我在想這樣的事情:
SET N = (EXEC sp_spaceused dbo.Name rows)
SET D = (%N%-30000000)
DELETE TOP (%D%) FROM dbo.Name
我曾經sp_spaceused避免將表鎖定到輸入陳述句,就像 count 一樣。
uj5u.com熱心網友回復:
您可以使用可更新的 CTE 或派生表進行洗掉。假設您想從表中洗掉隨機行,則不需要任何進一步的計算。
不要使用sp_spaceused,sys.partitions而是從中獲取資料
DECLARE @N int = (
SELECT SUM(p.rows)
FROM sys.partitions p
INNER JOIN sys.tables t ON p.[object_id] = t.[object_id]
INNER JOIN sys.schemas s ON s.[schema_id] = t.[schema_id]
WHERE t.name = N'Name'
AND s.name = N'dbo'
AND p.index_id IN (0,1)
);
WITH cte AS (
SELECT TOP (@N - 30000000)
*
FROM dbo.Name
)
DELETE FROM cte;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346129.html
標籤:sql sql-server 查询语句
上一篇:洗掉在不同列中具有相同鍵的重復行
下一篇:回傳每個月的最新值填充空值
