Ich habe eine Abfrage, dass ich die Datenbanken aus den sys.databases mit den Auslösern auswählen kann, die ich aktualisieren möchte. Von dort kann ich einen Cursor erstellen. Wenn ich jedoch in den Cursor gehe, um meine Trigger mit einem dynamischen Datenbanknamen @DatabaseExecuteName
zu aktualisieren, der auf MyDatabaseName.dbo
gesetzt ist, erhalte ich den Fehler ''CREATE/ALTER TRIGGER' does not allow specifying the database name as a prefix to the object name.'
Da ich in einem Cursor bin, kann ich keine USE MyDatabaseName
... GO ausführen, die GO-Anweisung ist nicht erlaubt im CURSOR. Ich habe versucht SQLCMD MODE :setvar DatabaseName "MyDatabaseName"
mit USE [$(DatabaseName)];
zu versuchen, um die Verwendung der Datenbank zu setzen. Ich fühle mich sehr nah, aber meine Stärke ist nicht SQL-Abfragen. Ich könnte etwas Hilfe bei dem verwenden, was mir fehlt.Wie aktualisiere ich Trigger für mehrere Datenbanken?
0
A
Antwort
1
Sie können EXEC
Anrufe verschachteln, so dass Sie eine USE
verwenden können und dann eine weitere Anweisung ausführen, und Sie müssen GO
nicht verwenden, um die Stapel zu trennen. Dies ist ein komplettes Skript, um die Technik zu demonstrieren:
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
die dann zeigt, dass diese Verbindung noch in der DB1
Datenbank vorhanden ist, aber der Auslöser wurde erfolgreich in der DB2
Datenbank auf die T1
Tabelle erstellt.
Worauf Sie achten müssen ist, dass Ihre Quote-Escaping korrekt ist.
+0
Das ist es, Danke für das Beispiel. – JabberwockyDecompiler
Verwandte Themen
- 1. für mehrere Datenbanken in Django
- 2. Firebase: Wie aktualisiere ich mehrere Ressourcen atomar?
- 3. Transaktion Rollback für mehrere Datenbanken
- 4. Eindeutige Identitätsspalte für mehrere Datenbanken
- 5. Wie aktualisiere/aktualisiere ich qTreewidget?
- 6. Jenkins Trigger für mehrere Planung
- 7. Wie aktualisiere/aktualisiere ich app.config?
- 8. Mehrere Bedingungen für SQLITE-Trigger
- 9. Symfony Mehrere Datenbanken
- 10. SQLAlchemy und mehrere Datenbanken
- 11. tests und database_cleaner für mehrere Datenbanken
- 12. Programmgesteuert ActiveRecordFacility für mehrere Datenbanken konfigurieren
- 13. Ausführen von SQL-Abfrage für mehrere Datenbanken
- 14. Fluent NHibernate + mehrere Datenbanken
- 15. Django verwenden mehrere Datenbanken
- 16. Propelorm v1 mehrere Datenbanken
- 17. Mehrere Datenbanken in Ecto
- 18. Mehrere Datenbanken in Rails
- 19. EnableTransactionManagement für mehrere Datenbanken im Frühjahr
- 20. Nachteile für mehrere Realm-Dateien/Datenbanken?
- 21. PostgreSql Update-Funktion für mehrere Datenbanken
- 22. Bestellen von Spielen für mehrere Datenbanken
- 23. CakePHP 3 Mehrere Datenbanken
- 24. JDBC - Mehrere Datenbanken verbinden
- 25. Spring + Hibernate - mehrere Datenbanken
- 26. Laravel mehrere Datenbanken PHPUnit
- 27. Wie aktualisiere ich Stripe für TLS 1.2
- 28. Mysql Mehrere Offline-Datenbanken
- 29. Wie aktualisiere ich Datenrahmen
- 30. NHibernate und mehrere Datenbanken
Sehen Sie sich dynamisches SQL an und verwenden Sie 'USE' am Anfang. –
Jens
Ja, sogar mit dynamischen SQL gibt es mir das gleiche Problem. Eine Select-Anweisung funktioniert, aber der Trigger erlaubt es mir nicht, die 'MyDatabaseName.dbo' vor dem Trigger-Objekt zu bilden. Und der dynamische SQL zeigt, dass ich den korrekten Datenbanknamen verwende. Ich habe sogar meine Abfrage als 'USE [MyDatabaseName]' mit einer ExecSQL-Anweisung in der Abfrage definiert. Immer noch sehe ich den Fehler, der Trigger existiert nicht. Wenn ich in den Cursor gehe, erhalte ich einen Fehler in der Nähe der 'go' Anweisung. – JabberwockyDecompiler