-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
所以,如果你有一些关于某个部分的具体问题,请回来问一下。 –