2016-06-12 12 views
-2

T-SQLでストアドプロシージャを作成して、特定のデータベースとスキーマのテーブルを切り捨てる予定です。データベース内のテーブルを切り捨てるT-SQLストアドプロシージャ

アイデアは、すべてのテーブル名をテーブルに格納することです。テーブルには4つのカラムがあり、それらはデータベース名、スキーマ名、テーブル名、フラグです。

フラグ値が0に設定されている場合、ストアドプロシージャはすべてのテーブルを切り捨てる必要があります。

誰もがこれについていくつかの洞察を与えることができますか?

+4

を行います。場合によってはカーソルを使用して動的SQLを使用する必要があります。本当の質問は何ですか? –

+0

はい私はそれをやっています。専門家からより多くの洞察を得ると思った – user1254579

+2

それで、あなたが特定の質問について質問をした場合は、それに戻ってきてください。 –

答えて

1

のようなものは、あなたが切り捨てられたテーブルの詳細を格納テーブルと呼ばれる@Tablesがあると、あなたはこれらを切り捨てるためにあなたのストアド・プロシージャ内で次のロジック/カーソルを使用することができますテーブル。それはあなたが何をする必要があるかである場合

を保持するテーブルのテーブル情報

DECLARE @Tables TABLE (DBName SYSNAME , SchemaName SYSNAME 
        ,TableName SYSNAME, Flag INT); 
INSERT INTO @Tables VALUES 
('TestDB' , 'dbo', 'TestTable1', 0), 
('TestDB' , 'dbo', 'TestTable2', 0), 
('TestDB' , 'dbo', 'TestTable3', 1) 

は、ストアドプロシージャのコードは、それを

Declare @DB  SYSNAME 
     , @Schema SYSNAME 
     , @Table SYSNAME 
     , @Sql VARCHAR(MAX); 


Declare Cur CURSOR LOCAL FAST_FORWARD FOR 
SELECT DBName , SchemaName , TableName 
FROM @Tables 
WHERE Flag = 0 

OPEN Cur 
    FETCH NEXT FROM Cur INTO @DB , @Schema , @Table 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 

SET @Sql = N'TRUNCATE TABLE ' 
      + QUOTENAME (@DB) + '.' + QUOTENAME (@Schema) + '.' + QUOTENAME (@Table) 

    Exec sp_executesql @Sql 

    FETCH NEXT FROM Cur INTO @DB , @Schema , @Table 

END 

CLOSE Cur 
DEALLOCATE Cur 
1

おそらく、この

Declare @Table table (dbname varchar(50),schem varchar(50),tablename varchar(50),flag bit) 
Insert into @Table (dbname,schem,tablename,flag) values 
('dbName1','dbo','MyTable1',0), 
('dbName2','dbo','MyTableA',1), 
('dbName1','dbo','MyTableB',0), 
('dbName2','dbo','MyTableZ',1), 
('dbName1','dbo','MyTable2',0) 


Declare @SQL varchar(max) = '' 
Select @SQL = coalesce(@SQL,' ') + ';truncate table [' +dbname +'].[' + schem +'].[' + tablename +']' 
From @Table 
Where Flag=1 

Select @SQL 
--Exec(@SQL) 
関連する問題