Sql-Server

用 where 子句截斷

  • January 11, 2019

我可以使用帶有 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)

有用的網址

引用自:https://dba.stackexchange.com/questions/170849