it-swarm.com.de

Wie lautet die T-SQL-Syntax, um eine Verbindung zu einem anderen SQL Server herzustellen?

Wenn ich eine gespeicherte Prozedur (SP) von einem SQL Server auf einen anderen kopieren muss, klicke ich mit der rechten Maustaste auf SP in SSMS und wähle Script Stored Procedure as> CREATE to> New Query Editor Window aus. Ich ändere dann die Verbindung, indem ich mit der rechten Maustaste auf das Fenster klicke und Verbindung> Verbindung ändern ... wähle und dann den neuen Server und F5 auswähle, um die Erstellung auf dem neuen Server auszuführen.

Meine Frage lautet also "Was ist die T-SQL-Syntax, um eine Verbindung zu einem anderen SQL Server herzustellen?" so dass ich einfach das oben in das create script und F5 einfügen kann, um es auszuführen, und es würde zum neuen Server wechseln und das create script ausführen.

Während ich die Frage tippte, wurde mir klar, dass Sie, wenn ich Ihnen den Hintergrund für das geben würde, was ich versuche, einen schnelleren und besseren Weg finden, dies zu erreichen.

55
Guy

Stellen Sie außerdem sicher, dass Sie beim Schreiben der Abfrage, die den verknüpften Server umfasst, Klammern wie diese einschließen:

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

Ich habe festgestellt, dass mindestens in 2000/2005 die [] -Klammern erforderlich sind, zumindest um den Servernamen herum.

48
Codewerks

Aktivieren Sie in SQL Server Management Studio den SQLCMD-Modus über das Menü Query ..__ Geben Sie oben in Ihr Skript den folgenden Befehl ein

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

Wenn Sie eine Verbindung zu mehreren Servern herstellen, müssen Sie unbedingt GO zwischen Verbindungen einfügen. Andernfalls wird Ihr T-SQL nicht auf dem Server ausgeführt, von dem Sie denken, dass es funktioniert.

82
mwg2002

Update: Um eine Verbindung zu einem anderen SQL-Server herzustellen und SQL-Anweisungen auszuführen, müssen Sie sqlcmd Utility verwenden. Dies erfolgt normalerweise in einer Batchdatei . Sie können dies mit xmp_cmdshell kombinieren, wenn Sie es innerhalb von Management Studio ausführen möchten.


eine Möglichkeit besteht darin, einen Linked Server zu konfigurieren. Dann können Sie den Verbindungsserver und den Datenbanknamen an den Tabellennamen anhängen. (Wählen Sie * von linkedserver.database.dbo.TableName aus)

USE master
GO
EXEC sp_addlinkedserver 
    'SEATTLESales',
    N'SQL Server'
GO
28
Gulzar Nazim

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

Linked Server und OPEN QUERY können Zugriff auf die DDL gewähren, erfordern jedoch etwas Neuschreiben Ihres Codes, um ihn als String einzukapseln. Dies erschwert das Entwickeln/Debuggen. 

Alternativ können Sie ein externes Treiberprogramm verwenden, um SQL-Dateien abzurufen, die über OPEN QUERY an den Remote-Server gesendet werden. In den meisten Fällen können Sie jedoch auch an erster Stelle direkt mit dem Server verbunden sein, um die DDL auszuwerten.

5
stephbu

Wann immer wir versuchen, Daten von einem anderen Server abzurufen, sind zwei Schritte erforderlich.

Erster Schritt:

-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='Oracle'

Zweiter Schritt:

--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)    
SELECT * INTO DESTINATION_TABLE_NAME 
FROM Oracle.SOURCE_DATABASENAME.DBO.SOURCE_TABLE
4

Wenn Sie eine Verbindung zu mehreren Servern herstellen, sollten Sie vor dem Serverwechsel ein "GO" hinzufügen. Andernfalls werden Ihre SQL-Anweisungen auf dem falschen Server ausgeführt.

z.B.

:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO

http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20mit%20an%20SSMS%20Query%20Windows%20 using%20SQLCMD%20Mode.aspx

3
Oscar Fraxedas

Erstellen Sie einen Verbindungsserver (den Sie mit sp_addlinkedserver ausführen können) und verwenden Sie dann OPENQUERY

2
Wayne

auf meinem Laufwerk C erstelle ich zuerst eine TXT-Datei, um eine neue Tabelle zu erstellen. Sie können in dieser Textdatei alles verwenden, was Sie möchten

in diesem Fall heißt die Textdatei "Bedrijf.txt".

der Inhalt:

Print 'START(A) create table'

GO 1

If not EXISTS
(
    SELECT *
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'Bedrijf'
)
BEGIN
CREATE TABLE [dbo].[Bedrijf] (
[IDBedrijf] [varchar] (38)   NOT NULL ,
[logo] [varbinary] (max) NULL ,
[VolledigeHandelsnaam] [varchar] (100)  NULL 
) ON [PRIMARY]

speichern Sie es

dann erstelle ich eine weitere txt-Datei mit dem Namen "Bedrijf.bat" und der Erweiterung bat . Der Inhalt ist:

OSQL.EXE  -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName

speichern Sie es und doppelklicken Sie im Explorer, um es auszuführen

Die Ergebnisse werden in einer TXT-Datei mit dem Namen "Bedrijf.out" auf Ihrem Laufwerk C gespeichert.

es zeigt

1> 2> 3> START(A) create table

wenn alles gut geht

Das ist es

2
frans eilering

Wenn möglich, checken Sie SSIS (SQL Server Integration Services) aus. Ich werde mit diesem Toolkit nur nasse Füße, aber ich habe bereits über 40 Server in einer Schleife und bereite mich darauf vor, alle möglichen Verwüstungen anrichten zu können;)

0
MikeV

Probieren Sie PowerShell Type wie folgt aus:

$cn = new-object system.data.SqlClient.SQLConnection("Data Source=server1;Initial Catalog=db1;User ID=user1;Password=password1");
$cmd = new-object system.data.sqlclient.sqlcommand("exec Proc1", $cn);
$cn.Open();
$cmd.CommandTimeout = 0
$cmd.ExecuteNonQuery()
$cn.Close();
0
Igor Krupitsky