web-dev-qa-db-ja.com

where句で切り捨て

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のテーブルがあります。特定の名前とそれに対応する列をデータベース全体から削除したいと思いました。名前はデータベース全体に広がっているので、各テーブルに移動して個別に削除するのではなく、一度に削除したいと思います。

4
l.lijith

いいえ、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 ] ) ) ]  
[ ; ]  

データを削除するより効率的な方法を探している場合は、 ここから開始 を選択します。

10
Erik Darling

SQL Serverには、TruncateDeleteDropの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)

役立つリンク

4
Hadi