Sql-Server
用 where 子句截斷
我可以使用帶有 where 子句的 truncate 命令嗎?我需要從幾個表中刪除特定行。
如何從整個數據庫中刪除特定數據?
SELECT DimEmployee.[FirstName], DimEmployee.[LastName], [SalesOrderNumber], [ShipDateKey] FROM DimEmployee JOIN [FactResellerSales] ON DimEmployee.[EmployeeKey] = [FactResellerSales].[ProductKey] WHERE DimEmployee.[FirstName] like 'kevin%' <--have to truncate this specific name from entire DB
有沒有其他方法可以從整個數據庫中刪除特定數據?
在我的數據庫中有 172 個表。我想從整個數據庫中刪除特定名稱及其對應的列。該名稱分佈在整個數據庫中,因此我想一次性刪除它,而不是去每個表並單獨刪除它。
不,Truncate 不能與
WHERE
子句一起使用。截斷只是釋放屬於表(或分區)及其索引的所有頁面。來自BOL:
-- Syntax for SQL Server and Azure SQL Database TRUNCATE TABLE [ { database_name .[ schema_name ] . | schema_name . } ] table_name [ WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) ) ] [ ; ]
如果您正在尋找一種更有效的方式來刪除數據,我會從這裡開始。
sql server 中有三種刪除方法:
Truncate
,Delete
,Drop
DROP、TRUNCATE 是 DDL 命令 (DROP 用於刪除表、列、約束等對象,但不是行)
DELETE 是一個 DML 命令。
“TRUNCATE 從表中刪除所有行而不記錄單個行的刪除。TRUNCATE TABLE 類似於沒有 WHERE 子句的 DELETE 語句;但是,TRUNCATE TABLE 更快並且使用更少的系統和事務日誌資源……”閱讀更多
您必須使用動態 sql 創建命令並執行它:(類似於此查詢)
DECLARE @strquery as NVARCHAR(MAX) SET @strquery = '' SELECT 'Delete T2 from [' + Table_name + '] As T2 Inner join DimEmployee as T1 On T1.[EmployeeKey] = T2.[ProductKey] Where T1.[FirstName] like ''kevin%'';' From information_schema.tables WHERE table_name <> 'DimEmployee' EXEC(@strquery)
有用的網址