GOOGLE ADS

Montag, 11. April 2022

Azure SQL – So überspringen Sie die USE-Anweisung in Azure SQL, während sie in SQL Server funktioniert

Ich versuche, ein altes Skript in einem Produktionsinstallationsprogramm zu aktualisieren, damit es sowohl mit Azure SQL als auch mit SQL funktioniert. Das Problem ist, dass unser Skript USE aufruft, um die Datenbank zu wechseln. Vor Ort erstellen wir die Datenbank, in Azure wird sie bereits für uns erstellt... also erkennen wir ihre Existenz und fahren fort. Allerdings fordern wir dort dann USE auf, für On-Prem zu wechseln.

Ich hatte gehofft, ich könnte es in Azure so überspringen

IF NOT SERVERPROPERTY('edition') = 'SQL Azure'
USE MYDB

Ich bekomme immer noch die Meldung "USE-Anweisung wird nicht unterstützt, um zwischen Datenbanken zu wechseln". Der Hack besteht darin, dies in eine Zeichenfolge zu packen und mit EXEC sp_executesql auszuführen

Dies funktioniert für die meisten Dinge, aber ich glaube nicht, dass es mit der USE-Anweisung funktioniert. Gibt es eine Möglichkeit, den Azure SQL-Parser diesen Abschnitt überspringen zu lassen, da er niemals ausgeführt wird?

Ich bin offen für SQL-basierte Problemumgehungen... aber ich versuche zu vermeiden, das Installationsprogramm neu zu gestalten.


Lösung des Problems

Die USE-Anweisung wird nicht unterstützt, um zwischen Datenbanken zu wechseln

In Azure SQL-Datenbank tritt dieser Fehler nur auf, wenn Sie versuchen, eine andere Datenbank zu „VERWENDEN".

In Azure SQL-Datenbank kann der Datenbankparameter nur auf die aktuelle Datenbank verweisen. Wenn eine andere Datenbank als die aktuelle Datenbank bereitgestellt wird, wechselt die USE-Anweisung nicht zwischen den Datenbanken und der Fehlercode 40508 wird zurückgegeben.

VERWENDUNG (Transact-SQL)

Ebenso sind dreiteilige Namen erlaubt, die auf die aktuelle Datenbank verweisen.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...