Frage

Wenn ich brauche eine gespeicherte Prozedur (SP) von einem SQL Server auf einen anderen zu kopieren, klicken Sie auf I direkt am SP in SSMS und wählen Sie Script Stored Procedure als> CREATE> Neue Abfrage-Editor-Fenster. Ich habe dann die Verbindung, indem Sie auf das Fenster der rechten Maustaste ändern und wählen Sie Verbindung> Verbindung ändern ... und dann den neuen Server und F5 Auswahl der erstellen, die auf dem neuen Server ausgeführt werden.

Also meine Frage ist: „Was ist die T-SQL-Syntax zu einem anderen SQL Server verbinden?“ so dass ich nur einfügen, dass es in dem Anfang des Skripts erstellen und F5 laufen und es würde auf den neuen Server wechseln und das Skript erstellen ausgeführt werden.

Während der Eingabe die Frage wird mir klar, dass, wenn ich gebe dir das wieder Boden zu, was ich versuche, dass Sie von mir mit einem schnelleren und besseren Weg könnten kommen zu tun, um dies zu erreichen.

War es hilfreich?

Lösung

Auch, stellen Sie sicher, wenn Sie die Abfrage mit den Verbindungsserver zu schreiben, Sie sind Klammern wie folgt aus:

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

Ich habe, dass zumindest gefunden auf 2000/2005 die eckigen Klammern [] sind notwendig, zumindest um die Servernamen.

Andere Tipps

In SQL Server Management Studio, schalten Sie SQLCMD-Modus aus dem Menü Abfrage. Dann am Anfang des Skripts, geben Sie den Befehl unter

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

Wenn Sie auf mehrere Server verbinden, müssen Sie GO zwischen Verbindungen einzusetzen; sonst Ihre T-SQL auf dem Server nicht ausführen, Sie werden es jetzt denken.

Update: für auf einem anderen SQL-Server verbinden und Ausführen von SQL-Anweisungen, müssen Sie sqlcmd-Dienstprogramm . Dies wird in der Regel in einer Batch-Datei. Sie können dies kombinieren mit xmp_cmdshell wenn Sie wollen führen sie es im Management Studio.


ein Weg ist, ein Verbindungsserver . dann können Sie den Verbindungsserver und den Datenbanknamen an den Tabellennamen anhängen. (Select * from linkedserver.database.dbo.TableName)

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

Wenn ich die Frage paraphrasieren bin - ist es möglich, Server-Kontext für die Abfrageausführung in der DDL zu holen - die Antwort ist nein. Nur Datenbankkontext programmatisch mit USE gewählt werden kann. (Mit vorgewählte bereits den Server-Kontext extern)

Linked Server und OPEN QUERY können den Zugriff auf die DDL geben, erfordern aber etwas ein Umschreiben des Codes als String zu kapseln - was es schwierig macht / debug zu entwickeln.

Alternativ können Sie mit einem externen Treiber-Programm zurückgreifen, um Pickup SQL-Dateien auf den Remote-Server über OPEN QUERY zu senden. Doch in den meisten Fällen könnte man genauso gut auf den Server direkt in den 1. Platz angeschlossen haben die DDL zu bewerten.

Jedes Mal, wenn wir keine Daten von einem anderen Server abzurufen versuchen wir brauchen zwei Schritten.

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

Wenn Sie auf mehrere Server verbinden Sie sollten einen ‚GO‘ vor dem Umschalten Server hinzufügen oder SQL-Anweisungen ausgeführt werden sollen gegen den falschen Server.

z.

: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%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

Versuchen Sie einen verknüpften Server zu schaffen (die Sie mit sp_addlinkedserver ) und dann mit OPENQUERY

auf meinem Laufwerk C: Ich erstelle zuerst eine txt-Datei eine neue Tabelle zu erstellen. Sie können, was auch immer Sie verwenden in dieser Textdatei möchten

In diesem Fall wird die Textdatei "Bedrijf.txt" genannt

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

Dann erstelle ich eine andere txt-Datei mit dem Namen „Bedrijf.bat“ und der Erweiterung Fledermaus. Es ist Inhalt:

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

speichern und aus dem Explorer Doppelklick ausführen

Die Ergebnisse werden in einer txt-Datei auf Ihrem Laufwerk C: mit dem Namen „Bedrijf.out“

gespeichert werden

es zeigt

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

wenn alles gut geht

Das ist es

Wenn möglich, überprüfen SSIS (SQL Server Integration Services). Ich bin nur meine Füße nass mit diesem Toolkit bekommen, aber bereits über mehr als 40 Servern am Looping und Vorbereitung alle Arten von Chaos zu stiften;)

Versuchen Sie Powershell-Typen wie:

$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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top