2016-09-19 48 views
-1

我想將下面的查詢作爲動態SQL。如何使表格截斷查詢爲動態SQL

查詢1:表截斷

select 'Truncate Table '+''+ name from sys.tables where name like '%RND%' 

問題2:

select 'Insert into '+''+ name +'Select * from '+'.'+''+ name from sys.tables where name like '%RND%' 

回答

0

通過使用以下動態查詢可以截斷所需的表:

DECLARE @DynamicSQL AS VARCHAR(MAX) = ''; 

SELECT @DynamicSQL = @DynamicSQL + 'TRUNCATE TABLE ' + QUOTENAME(NAME) + '; ' 
FROM sys.tables 
WHERE NAME LIKE '%RND%'; 

--PRINT @DynamicSQL 
EXEC (@DynamicSQL) 

對於第二查詢動態查詢是:

DECLARE @DynamicSQL1 AS VARCHAR(MAX) = ''; 

SELECT @DynamicSQL1 = @DynamicSQL1 + 'INSERT INTO ' + QUOTENAME(NAME) + ' SELECT * FROM ' + QUOTENAME(NAME) + '; ' 
FROM sys.tables 
WHERE NAME LIKE '%RND%'; 

--PRINT @DynamicSQL1 
EXEC (@DynamicSQL1) 
+0

謝謝阿魯。如果可能,請您提供查詢2 – SNR

+0

@SNR:查詢已更新爲第二個選項 – Arulkumar

+0

Great Arul。您的幫助是非常感謝,不幸的是它顯示消息窗口,因爲我不符合投票的這個答案.. – SNR

0

這可能是你在找什麼

所有語句被收集在一個表中,通過它們的插入點排序(idIDENTITY)。這將是 - 肯定 - 沒問題爲您打造以同樣的方式你的第二個說法......

DECLARE @cmdTbl TABLE(id INT IDENTITY,cmd NVARCHAR(MAX)); 

INSERT INTO @cmdTbl(cmd) 
SELECT 'TRUNCATE TABLE ' + QUOTENAME(t.TABLE_CATALOG) + '.' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME) + ';' 
FROM INFORMATION_SCHEMA.TABLES AS t 
WHERE t.TABLE_NAME LIKE '%RND%' 

--AFTER收集我用CURSOR執行它們一個接一個的所有語句。

DECLARE @cmd VARCHAR(MAX); 
DECLARE cur CURSOR FOR SELECT cmd FROM @cmdTbl ORDER BY id; 
OPEN cur; 

FETCH NEXT FROM cur INTO @cmd; 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @cmd; 
    --EXEC(@cmd); --For syntax check you start without EXEC... 
    FETCH NEXT FROM cur INTO @cmd; 
END 
CLOSE cur; 
DEALLOCATE cur;