2016-09-19 5 views
-1

以下のクエリを動的SQLとして作成したいと考えています。動的SQLとしてテーブル切り捨てクエリを作成する方法

クエリ1:表の切り捨て

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

クエリ2:2番目のクエリのために

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

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

--PRINT @DynamicSQL 
EXEC (@DynamicSQL) 

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

答えて

0

あなたが必要なテーブルを切り捨てることができ、次の動的クエリを使用して動的クエリは次のとおりです。

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:2番目のオプションのクエリが更新されました – Arulkumar

+0

Great Arul。あなたの助けは非常に残念ですが、私はこの答えに投票する資格がないので、メッセージウィンドウを表示していただければ幸いです。 – SNR

0

これは、あなたが(idIDENTITYである)、インサートのその時点で注文したすべてのステートメントがテーブルに収集され

、探しているものかもしれません。確かに - - それはできなくなります何の問題、あなたが同じように2番目の文を構築するため...

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%' 

私はそれらを次々に実行するためにCURSORを使用するすべての文を集め--after。

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; 
関連する問題