sql - 在一个 MySQL 语句中截断多个表

标签 sql truncate

是否有可能使用一个 SQL 语句、多个表进行截断?

像这样:

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;

问候

最佳答案

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

关于sql - 在一个 MySQL 语句中截断多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15926826/

相关文章:

mysql - 使用php查询计算字段总计

sql - 迁移后 PostgreSQL 性能下降

ruby-on-rails-3 - 在 ActiveRecord Rails 3.1 的向下迁移方法中截断表

oracle - 为什么 CAST 截断文本而不是抛出错误?

MySQL 截断挂起

c# - 如何在 C# 中截断列表?

mysql - SQL根据第一个表中的时间差连接第二个表

java - 连接关闭后 JDBC 回滚

sql - 操作数数据类型 void 类型对于求和运算符无效

postgresql - Postgres : Reduce varchar size and truncate