63 Stimmen

Was ist die T-SQL-Syntax zum Verbinden mit einem anderen SQL Server?

Wenn ich eine gespeicherte Prozedur (SP) von einem SQL Server auf einen anderen kopieren muss, klicke ich mit der rechten Maustaste auf die SP in SSMS und wähle "Gespeicherte Prozedur skripten als > CREATE nach > Neue Abfrage-Editor-Fenster". Dann ändere ich die Verbindung, indem ich mit der rechten Maustaste auf dieses Fenster klicke und "Verbindung > Verbindung ändern..." auswähle und dann den neuen Server auswähle und F5 drücke, um das Erstellen auf dem neuen Server auszuführen.

Also lautet meine Frage: "Was ist die T-SQL-Syntax, um eine Verbindung zu einem anderen SQL Server herzustellen?", damit ich das einfach oben im Skript erstellen und F5 drücken kann, um es auszuführen und es zum neuen Server wechseln und das Erstellungsskript ausführen kann.

Beim Tippen der Frage wurde mir klar, dass, wenn ich Ihnen den Hintergrund zu dem, was ich versuche zu tun, gebe, Sie möglicherweise schneller und besser als ich eine Lösung finden könnten.

92voto

mwg2002 Punkte 901

Im SQL Server Management Studio aktivieren Sie den SQLCMD-Modus im Abfrage-Menü. Dann geben Sie am Anfang Ihres Skripts den folgenden Befehl ein

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]

Wenn Sie sich mit mehreren Servern verbinden, stellen Sie sicher, dass Sie GO zwischen den Verbindungen einfügen; ansonsten wird Ihr T-SQL nicht auf dem Server ausgeführt, von dem Sie denken, dass es das tun wird.

6 Stimmen

Wenn Sie eine Verbindung zu mehreren Servern herstellen, sollten Sie ein 'GO' hinzufügen, bevor Sie die Server wechseln, oder Ihre SQL-Anweisungen werden auf dem falschen Server ausgeführt. sqlmatters.com/Articles/…

0 Stimmen

Wie schalte ich den SQLCMD-Modus AUS?

53voto

Codewerks Punkte 5684

Vergewissern Sie sich auch, dass Sie die Abfrage, die den verknüpften Server betrifft, in Klammern wie folgt einschließen:

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]

Ich habe festgestellt, dass zumindest in 2000/2005 die [] Klammern notwendig sind, zumindest um den Servernamen.

0 Stimmen

Ich denke, die Antwort von mwg2002 könnte die Frage genauer beantworten. Diese Antwort hier erklärt, wie man einen anderen Server abfragen kann, während die andere Antwort richtig erklärt, wie man eine Verbindung dynamisch ändern kann (mit dem Vorbehalt, dass der SQLCMD-Modus im SSMS aktiviert sein muss).

27voto

Gulzar Nazim Punkte 51098

Aktualisierung: Um eine Verbindung zu einem anderen SQL-Server herzustellen und SQL-Anweisungen auszuführen, müssen Sie das sqlcmd-Dienstprogramm verwenden. Dies wird in der Regel in einer Batchdatei durchgeführt. Sie können dies mit xmp_cmdshell kombinieren, wenn Sie es innerhalb des Management Studios ausführen möchten.


Ein Weg ist die Konfiguration eines verknüpften Servers. Dann können Sie den verknüpften Server und den Datenbanknamen dem Tabellennamen anhängen. (select * from linkedserver.database.dbo.TableName)

USE master
GO
EXEC sp_addlinkedserver 
    'SEATTLESales',
    N'SQL Server'
GO

1 Stimmen

Dies ist tatsächlich die richtige Antwort auf die spezifische Frage. Oder vielmehr stellen Sie zunächst sicher, dass der andere Server verknüpft und daher abfragbar ist, dann können Sie den anderen Server wie von Codewerks erklärt auswählen.

6voto

stephbu Punkte 5051

Wenn ich die Frage umformulieren würde - ist es möglich, den Serverkontext für die Abfrageausführung im DDL auszuwählen - lautet die Antwort nein. Nur der Datenbankkontext kann programmatisch mit USE ausgewählt werden. (nachdem der Serverkontext extern vorab ausgewählt wurde)

Verknüpfte Server und OPEN QUERY können Zugriff auf das DDL ermöglichen, erfordern jedoch eine gewisse Umformulierung Ihres Codes, um es als Zeichenfolge zu umschließen - was die Entwicklung/Fehlerbehebung erschwert.

Alternativ könnten Sie auf ein externes Treiberprogramm zurückgreifen, um SQL-Dateien auszuwählen, die über OPEN QUERY an den Remote-Server gesendet werden sollen. In den meisten Fällen wäre es jedoch besser, sich direkt mit dem Server verbunden zu haben, um das DDL zu bewerten.

5voto

Immer wenn wir versuchen, Daten von einem anderen Server abzurufen, benötigen wir zwei Schritte.

Erster Schritt:

-- Server ein skalare Variable
DECLARE @SERVER VARCHAR(MAX)
-- Oracle ist der Server, mit dem wir uns verbinden möchten
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE'

Zweiter Schritt:

-- DBO ist der Besitzernamen, um den Tabellenbesitzern auszulesen (SP_HELP TABLENAME)
SELECT * INTO DESTINATION_TABLE_NAME 
FROM ORACLE.SOURCE_DATABASENAME.DBO.SOURCE_TABLE

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X