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

use*_*834 18 sql truncate

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

像这样:

 truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
Run Code Online (Sandbox Code Playgroud)

问候

Pan*_*wal 11

您可以像这样使用sp_MSforeachtable存储过程:

USE MyDatabase
EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'
Run Code Online (Sandbox Code Playgroud)

或者您可以创建SQL语句

SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TableName%'
Run Code Online (Sandbox Code Playgroud)

并运行以上SQL语句

  • `sp_MSforeachtable` 是 MSSQL,这个问题是 MySQL。 (3认同)

Luv*_*Luv 8

不,但还有另一种选择:

SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'your-table-name%'
Run Code Online (Sandbox Code Playgroud)

示例:

SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TBL_ORDERS_20%'
Run Code Online (Sandbox Code Playgroud)

现在您有以上Select查询的结果

TRUNCATE TABLE TBL_ORDERS_2001
TRUNCATE TABLE TBL_ORDERS_2002
TRUNCATE TABLE TBL_ORDERS_2003
TRUNCATE TABLE TBL_ORDERS_2004
Run Code Online (Sandbox Code Playgroud)

或者你可以使用类似的东西

select 'Truncate table ' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('Table1', 'Table2')
Run Code Online (Sandbox Code Playgroud)

链接1

链接2

更新:

Query在您的问题中查看示例中的表

truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp

我想你想要Truncate所有临时表.

你可以用这样的简单方法做到Query这一点

select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
Run Code Online (Sandbox Code Playgroud)


Ind*_*ght 7

不,您只能使用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
Run Code Online (Sandbox Code Playgroud)

您可以在@tableList变量中将所有表名以逗号分隔,如果是前缀,则可以截断不同模式中的多个表.


小智 5

只需轻松输入此 MySQL 语句:

TRUNCATE TABLE yourtablename1;
TRUNCATE TABLE yourtablename2;
TRUNCATE TABLE yourtablename3;
Run Code Online (Sandbox Code Playgroud)

... 等等。

用你的名字改变你的表名。

不要忘记分号;

  • 问题是一条 sql 语句;) (3认同)