2008-09-16 10 views
28

Ich möchte Daten von der Datenbank eines Servers in die Datenbank eines anderen Servers portieren. Die Datenbanken befinden sich beide auf einem anderen mssql 2005-Server. Die Replikation ist wahrscheinlich keine Option, da die Zieldatenbank von Grund auf neu erstellt wird.Cross-Server SQL

preferebly würde ich tun, so etwas wie

insert * 
from db1/table1 
into db2/table2 
where rule1 = true 

Es ist offensichtlich, dass die Verbindungsinformationen in diesem Skript in somehwere gehen würden.

Antwort

33

Ich denke, was Sie tun möchten, ist ein Verbindungsserver wie this msdn Artikel zu erstellen. Sie würden dann wählen Sie einen 4-teiligen Objektnamen zB mit:

Select * From ServerName.DbName.SchemaName.TableName 
+0

Ein bisschen spät, aber ich erst jetzt dieser revisited Frage und ja, das sieht nach einer Antwort auf meine Frage aus. Obwohl mir inzwischen klar ist, dass meine Frage die Frage nach der Antwort sein sollte, die ich ausgewählt habe. Alles wird ein bisschen kompliziert ... –

0

Können Sie die Data Transformation Services für diese Aufgabe verwenden? Dies bietet alle Arten von Bolt-together-Tools für diese Art von Sache.

Sie können die SQL Server 2005 Feature Pack von der Microsoft-Website here

+0

Wie Sie wahrscheinlich wissen, SSIS ist der ‚neue‘ DTS für SQL Server 2005+ – Galwegian

1

Are SQL Server Integration Services (SSIS) herunterladen eine Option? Wenn ja, würde ich das verwenden.

1

Wäre Sie den gesamten Inhalt der Datenbank von einem Server auf einen anderen zu übertragen oder nur einige Daten von ein paar Tabellen?

Für beide Optionen würde SSIS die Aufgabe erfüllen, besonders wenn Sie planen, die Übertragung regelmäßig durchzuführen. mit T-SQL in SQL Management Studio

Wenn Sie wollen einfach nur einige Daten von 1 oder 2 Tabellen kopieren und es bevorzugen, dann können Sie den Verbindungsserver verwenden, wie von Pelser vorgeschlagen

  1. die Quelldatenbankserver einrichten als Verbindungsserver
  2. die folgende Syntax verwenden, um Daten zugreifen
select columnName1, columnName2, etc from serverName.databaseName.schemaName.tableName
1

Nun, ich mit Ihrem Kommentar zu Replikation nicht einverstanden ist. Sie können eine Replikation starten, indem Sie eine Datenbank von Grund auf neu erstellen, und Sie können steuern, ob die Aktualisierungen durchgeführt werden, indem Sie die verfügbare Client-Datenbank aktualisieren oder einfach die Datenbank neu erstellen.

Die automatisierte Replikation erleichtert Ihnen die Arbeit, indem Schlüssel und Beziehungen automatisch verwaltet werden.

Ich denke, die einfachste Sache zu tun ist, eine Snapshot-Replikation durch MSSQL Server Studio zu starten, die T-SQL entsprechenden Skripts (dh die entsprechenden T-SQL-Anweisungen für die Veröffentlichung und Abonnements), und notieren diese Skripte als Teil eines Jobs in der Jobliste des SQL-Agenten oder als Replikationsjob im Replikationsordner.

1

Sie könnten die Route des Verbindungsservers gehen.

Sie können einfach nicht die Auswahl * in Sie müssen eine einfügen in wählen.

Ich würde Replikation vermeiden, wenn Sie keine Erfahrung damit haben, wie es schwierig sein kann zu reparieren, wenn es bricht und anfällig für andere Probleme sein kann, wenn nicht ordnungsgemäß verwaltet.

Halten Sie es einfach, besonders wenn die Datenbanken klein sind.

6

Sie können Datenquelle öffnen wie folgt verwenden:

EXEC sp_configure 'show advanced options', 1 
GO 
RECONFIGURE 
GO 

EXEC sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 
GO 


SELECT * 
FROM OPENDATASOURCE('SQLOLEDB', 
        'Data Source=<Ip Of Your Server>; 
        User ID=<SQL User Name>;Password=<SQL password>').<DataBase name>.<SchemaName>.<Table Or View Name> 

Go 
+0

Cool, wusste nicht, dass das existiert. Auf der anderen Seite sagt http://technet.microsoft.com/en-us/library/ms179856.aspx, dass es dafür explizite regedits geben muss. –

-1
CREATE VIEW newR1 
AS 
SELECT * from OPENQUERY ([INSTANCE_NAME], 'select * from DbName.SchemaName.TableName') 
+0

Dies erfordert auch den Linked Server, also ist dies im Grunde nur eine andere Art von Abfrage, die demselben Vorschlag folgt, der bereits vor einigen Jahren gemacht wurde. – Magier