1. ホーム
  2. sql

[解決済み] 1つのMySQLステートメントで複数のテーブルを切り捨てる

2022-02-10 09:54:26

質問

1つのSQLステートメントで複数のテーブルを切り捨てることはできますか?

このように

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;

備考

解決方法は?

いいえ、TRUNCATEコマンドで切り捨てられるのは1つのテーブルだけです。複数のテーブルを切り捨てるには、T-SQLを使用して、テーブル名を反復して、一度にそれぞれを切り捨てることができます。

DECLARE @delimiter CHAR(1),
        @tableList VARCHAR(MAX),
        @tableName VARCHAR(20),
        @currLen INT

SET @delimiter = ','

SET @tableList = 'table1,table2,table3'

WHILE LEN(@tableList) > 0
BEGIN
    SELECT @currLen = 
    (
        CASE charindex( @delimiter, @tableList ) 
            WHEN 0 THEN len( @tableList  ) 
            ELSE ( charindex( @delimiter, @tableList  ) -1 )
        END
    ) 

    SELECT @tableName = SUBSTRING (@tableList,1,@currLen )

    TRUNCATE TABLE @tableName

    SELECT tableList = 
    (
        CASE ( len( @tableList ) - @currLen  ) 
            WHEN 0 THEN '' 
            ELSE right( @tableList, len( @tableList ) - @currLen  - 1 ) 
        END
    ) 
END

テーブル名は @tableList 変数でカンマ区切りにすることができ、接頭辞があれば異なるスキーマの複数のテーブルを切り捨てることができます。