SQL

在一条MySQL语句中截断多个表

发布于 2021-05-10 20:31:57

有可能用一个SQL语句,多个表截断吗?

像这样:

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;

问候

关注者
0
被浏览
265
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    不可以,您只能使用TRUNCATE命令截断单个表。要截断多个表,可以使用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变量中用逗号分隔所有表名,是的,如果有前缀,则可以截断来自不同模式的多个表。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看