我正在尝试将模式的所有表名分配给一个变量。稍后,我希望为每个表创建一个更新触发器。 我正在使用:
提取表select table_name from information_schema.tables;
执行以下操作时,我会得到空值:
declare @tablename nvarchar(max)
select table_name = @tablename from information_schema.tables;
我在SSMS2016中使用mssql,有人可以告诉我如何将表名分配给变量吗?
答案 0 :(得分:1)
这是一个非常好的问题,是否可以为每个表创建一个触发器,但是-每当我需要 create 语句时-我建议这样做:
select CONCAT('CREATE TRIGGER ',QUOTENAME(CONCAT(table_name,'_trigger')),' ON ',QUOTENAME(table_name),' AFTER UPDATE AS BEGIN PRINT ''yeah!''; END',CHAR(13),CHAR(10),'GO' )
from information_schema.tables
where TABLE_TYPE='BASE TABLE';
将输出发送到文本,您将得到:
CREATE TRIGGER [SomeTable_trigger] ON [SomeTable] AFTER UPDATE AS BEGIN PRINT 'yeah!'; END
GO
CREATE TRIGGER [Another_trigger] ON [Another] AFTER UPDATE AS BEGIN PRINT 'yeah!'; END
GO
... more of this...
GO
...
下一步是将所有这些语句复制到新的查询窗口中,并使其适应您的需求。