Ich habe einen Prozess, bei dem verschiedene Befehle zwischen mehreren Datenbanken ausgeführt werden. Wenn ich jedoch dynamisches SQL verwende, um die Datenbank mit 'use @var' zu ändern, ändert sich die Datenbank nicht wirklich.
Ausführen in [test_db]:
declare @currentDB varchar(max)
declare @sql varchar(max)
set @currentDB = DB_NAME()
set @sql = 'use [' + @currentDB +']'
use master
exec(@sql)
select DB_NAME()
Gibt [Master] als aktuellen Datenbanknamen zurück. Wenn ich use [test_db]
nicht dynamisch, sondern als Befehl eingebe, wird der richtige Name zurückgegeben.
Gibt es eine Möglichkeit, die korrekt zwischen Datenbanken wechselt?
exec OtherDatabase.sys.sp_executesql N'select db_name()'
Das funktioniert auch.
quelle
Als ich aus dem vorherigen Beitrag gelernt habe, bin ich etwas tiefer gegangen und habe mich selbst beeindruckt ...
quelle