Truncateコマンドをwhere句で使用できますか?複数のテーブルから特定の行を削除する必要があります。
データベース全体から特定のデータを削除するにはどうすればよいですか?
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
DB全体から特定のデータを削除する他の方法はありますか?
私のデータベースには172のテーブルがあります。特定の名前とそれに対応する列をデータベース全体から削除したいと思いました。名前はデータベース全体に広がっているので、各テーブルに移動して個別に削除するのではなく、一度に削除したいと思います。
いいえ、TruncateはWHERE
句と一緒に使用できません。 Truncateは、テーブル(またはパーティション)とそのインデックスに属するすべてのページの割り当てを解除するだけです。
開始 [〜#〜] 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
の3つの削除メソッドがあります。
DROP、TRUNCATEはDDLコマンドです(DROPは、テーブル、列、制約などのオブジェクトを削除するために使用されますが、行は削除されません)
DELETEはDMLコマンドです。
"TRUNCATE個々の行の削除をログに記録せずに、テーブルからすべての行を削除します。TRUNCATETABLEは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)
役立つリンク