首页 > 解决方案 > 将列值分配给 mssql 中的变量

问题描述

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

select table_name from information_schema.tables;

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

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

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

标签: sql-servertsqlvariables

解决方案


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

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

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


推荐阅读