2013-04-10 154 views

回答

6

不行,你只能用截斷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可變逗號分隔所有的表名和是的,你可以從不同的模式,如果他們的前綴截斷多個表。

+0

嗯...這實際上工作? – 2016-06-19 23:14:22

9

你可以使用像這樣的sp_MSforeachtable存儲過程:

USE MyDatabase 
EXEC sp_MSforeachtable 'TRUNCATE TABLE ?' 

或者,您可以創建SQL語句

SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'TableName%' 

和運行這個上面的SQL語句

+0

完美,正是我期待的 - 謝謝! – maialithar 2014-04-02 17:47:42

+0

完美。我在SSIS中使用exec sql來獲取列表和一個foreach循環遍歷每一個。我想你可以在SSMS中用光標做同樣的事情。 – KeithL 2017-11-07 15:07:05

6

號但是,還有另一種:

SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'your-table-name%' 

例子:

SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'TBL_ORDERS_20%' 

現在你有以下結果上述Select查詢

TRUNCATE TABLE TBL_ORDERS_2001 
TRUNCATE TABLE TBL_ORDERS_2002 
TRUNCATE TABLE TBL_ORDERS_2003 
TRUNCATE TABLE TBL_ORDERS_2004 

,或者您可以使用類似

select 'Truncate table ' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('Table1', 'Table2') 

Link 1

Link 2

更新:

看着表在你的榜樣Query在你的問題

truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp

我想你想Truncate所有臨時表

你可以用一個簡單的Query這樣

select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES 
2

獎金例如這樣做,截斷所有表在一個數據庫中開始用繩子...

SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'my_database_name' 
    AND TABLE_NAME LIKE 'cache_%';