我有一個查詢,我可以從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