-2
我打算在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
所以,如果你有一些關於某個部分的具體問題,請回來問一下。 –