我有一个查询,我可以从sys.databases中选择具有我希望更新的触发器的数据库。从那里我可以创建一个光标。但是,当我使用设置为MyDatabaseName.dbo的动态数据库名@DatabaseExecuteName进入游标来更新触发器时,我收到错误''CREATE/ALTER TRIGGER' does not allow specifying the database name as a prefix to the object name.',因为我在游标中,我无法执行USE MyDatabaseName ...GO,不允许在游标内使用GO语句。我已经使用USE [$(DatabaseName)];尝试了SQLCMD模式:setvar DatabaseName "MyDatabaseName",以尝试设置use数据库。我觉得我已经很接近了,但是我的强项不是SQL查询。我需要一些帮助来弥补我所遗漏的东西。
发布于 2017-03-08 23:45:30
您可以嵌套EXEC调用,这样就可以使用USE,然后执行进一步的语句,而不需要使用GO来分隔批处理。这是演示该技术的完整脚本:
create database DB1
go
create database DB2
go
use DB2
go
create table T1 (ID int not null)
go
create table T2 (ID int not null)
go
use DB1
go
exec('use DB2; exec(''create trigger T_T on T1 after insert as
insert into T2(ID) select i.ID from inserted i'')');
select DB_NAME()
insert into DB2..T1(ID) values (1),(2);
select * from DB2..T2然后显示该连接仍然在DB1数据库中,但是在DB2数据库中的T1表上成功创建了触发器。
你需要注意的是让你的引号转义正确。
https://stackoverflow.com/questions/42675047
复制相似问题