T-SQLでストアドプロシージャを作成して、特定のデータベースとスキーマのテーブルを切り捨てる予定です。データベース内のテーブルを切り捨てるT-SQLストアドプロシージャ
アイデアは、すべてのテーブル名をテーブルに格納することです。テーブルには4つのカラムがあり、それらはデータベース名、スキーマ名、テーブル名、フラグです。
フラグ値が0に設定されている場合、ストアドプロシージャはすべてのテーブルを切り捨てる必要があります。
誰もがこれについていくつかの洞察を与えることができますか?
T-SQLでストアドプロシージャを作成して、特定のデータベースとスキーマのテーブルを切り捨てる予定です。データベース内のテーブルを切り捨てるT-SQLストアドプロシージャ
アイデアは、すべてのテーブル名をテーブルに格納することです。テーブルには4つのカラムがあり、それらはデータベース名、スキーマ名、テーブル名、フラグです。
フラグ値が0に設定されている場合、ストアドプロシージャはすべてのテーブルを切り捨てる必要があります。
誰もがこれについていくつかの洞察を与えることができますか?
のようなものは、あなたが切り捨てられたテーブルの詳細を格納テーブルと呼ばれる@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
おそらく、この
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)
を行います。場合によってはカーソルを使用して動的SQLを使用する必要があります。本当の質問は何ですか? –
はい私はそれをやっています。専門家からより多くの洞察を得ると思った – user1254579
それで、あなたが特定の質問について質問をした場合は、それに戻ってきてください。 –