将列值分配给 MSSQL 中的变量



我正在尝试将架构的所有表名分配给变量。稍后,我希望为每个表创建一个更新触发器。 我正在使用以下方法提取表:

select table_name from information_schema.tables;

当我执行以下操作时,我得到空值:

declare @tablename nvarchar(max)
select table_name = @tablename from information_schema.tables;

我在SSMS2016中使用 mssql,有人可以告诉我如何将表名分配给变量吗?

这是一个非常好的问题,如果为每个表创建一个触发器是个好主意,但是 - 每当我需要创建语句时 - 我建议这个:

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
...

下一步是将所有这些语句复制到新的查询窗口,并根据需要调整它们。

最新更新