我有一個查詢,我可以從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. 如何使用codeIgniter按時間更新數據庫觸發器?
- 6. 觸發數據庫更新的窗體
- 7. 如何讓按鈕觸發ATK4中的數據庫更新?
- 8. 如何更新觸發器中的多個表和字段?
- 9. 如何創建一個數據庫級別的觸發器來插入/更新
- 10. SQL觸發器 - 每當另一個數據庫中的另一個表正在更新時如何更新表?
- 11. 多行更新觸發器
- 12. 多行更新觸發器
- 13. 更新觸發器在多記錄更新上觸發的頻率如何?
- 14. 如何在觸發器中放置多個更新?
- 15. 用觸發器更新多個表
- 16. 通過觸發器更新多個行
- 17. 在MySQL數據庫中放置觸發器以更新Oracle數據庫?
- 18. mysql觸發器從數據庫中選擇並更新列
- 19. 如何在sql中更改數據庫時執行觸發器
- 20. 多個數據庫更新:
- 21. 如何刷新wpf數據觸發器?
- 22. 是否有可能從另一個Firebird數據庫中的觸發器更新一個Firebird數據庫?
- 23. TSQL觸發器中的更新函數
- 24. 如何根據數據庫中的更新觸發Asp.net應用程序?
- 25. H2數據庫觸發器
- 26. Informix數據庫觸發器
- 27. 使用觸發器來更新數據庫緩存
- 28. Mysql中的跨數據庫觸發器
- 29. 確定哪個表在數據庫級觸發器中已更新
- 30. 數據更新複製時觸發器不觸發
查看動態SQL並在開始時使用'USE'。 –
Jens
即使使用動態SQL,它也給我提出了同樣的問題。 select語句可以工作,但觸發器不允許我在觸發器對象之前形成'MyDatabaseName.dbo'。動態SQL確實表明我使用了正確的數據庫名稱,甚至在查詢中使用ExecSQL語句形成了'USE [MyDatabaseName]'查詢。我仍然看到錯誤,觸發器不存在。如果我放置在光標內,我會在'go'語句附近收到錯誤。 – JabberwockyDecompiler