我有一个查询,我可以从sys.databases中选择我希望更新的触发器的数据库。从那里我可以创建一个游标。但是当我进入光标更新我的触发器使用动态数据库名称@DatabaseExecuteName
设置为MyDatabaseName.dbo
我收到错误''CREATE/ALTER TRIGGER' does not allow specifying the database name as a prefix to the object name.'
因为我在光标我不能执行USE MyDatabaseName
... GO,GO语句是不允许在CURSOR内部。我尝试使用SQLCMD模式:setvar DatabaseName "MyDatabaseName"
和USE [$(DatabaseName)];
尝试设置使用数据库。我觉得我非常接近,但我的实力不是SQL查询。我可以使用一些我缺少的帮助。如何更新多个数据库中的触发器?
0
A
回答
1
您可以嵌套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
创建。
你必须注意的是让你的报价逃避正确。
+0
这样做,谢谢你的例子。 – JabberwockyDecompiler
相关问题
- 1. 更新另一个数据库中的表的触发器
- 2. 触发更新另一个数据库中的数据
- 3. 如何使用触发器更新另一个数据库中的表?
- 4. Eclipselink和更新触发器多次访问数据库
- 5. 触发数据库更新的窗体
- 6. 如何让按钮触发ATK4中的数据库更新?
- 7. 如何创建一个数据库级别的触发器来插入/更新
- 8. 多行更新触发器
- 9. 多个数据库更新:
- 10. 如何刷新wpf数据触发器?
- 11. 是否有可能从另一个Firebird数据库中的触发器更新一个Firebird数据库?
- 12. TSQL触发器中的更新函数
- 13. 使用触发器来更新数据库缓存
- 14. 上更新数据库创建MySQL触发器
- 15. 数据更新复制时触发器不触发
- 16. sybase更新触发器 - 检查多个行以进行更新
- 17. 从INSERT触发器更新时触发更新后未触发
- 18. 如何使用更新触发器更新另一个表?
- 19. 如何更新多个Access数据库中的功能(MDB,ACCDB)
- 20. 如何更新oracle数据库中的多个表?
- 21. 如何使用c#更新数据库中的多个记录
- 22. 跨多个数据库的SQL Server 2014触发器
- 23. 如何通过不绕过任何触发器来更新Oracle数据库中的大量数据?
- 24. 如何语法SQL中的触发器,以便更新同一个表中的列AFTER INSERT(oracle数据库)
- 25. MySQL - 后更新在两个数据库之间触发
- 26. 触发两个数据库
- 27. Mysql触发器更新多个表中的列
- 28. 如何使用触发器更新Oracle中数据的数字行
- 29. Oracle数据库中的表触发器的多模式权限
- 30. 数据库触发器何时坏?
查看动态SQL并在开始时使用'USE'。 –
Jens
即使使用动态SQL,它也给我提出了同样的问题。 select语句可以工作,但触发器不允许我在触发器对象之前形成'MyDatabaseName.dbo'。动态SQL确实表明我使用了正确的数据库名称,甚至在查询中使用ExecSQL语句形成了'USE [MyDatabaseName]'查询。我仍然看到错误,触发器不存在。如果我放置在光标内,我会在'go'语句附近收到错误。 – JabberwockyDecompiler