Frage

Ich bin noch ziemlich neu in T-SQL und SQL 2005.Ich muss eine Spalte mit Ganzzahlen aus einer Tabelle in Datenbank1 in eine identische Tabelle (nur die benötigte Spalte fehlt) in Datenbank2 importieren.Bei beiden handelt es sich um SQL 2005-Datenbanken.Ich habe den integrierten Importbefehl in Server Management Studio ausprobiert, aber er zwingt mich, die gesamte Tabelle zu kopieren.Dies führt zu Fehlern aufgrund von Einschränkungen und „schreibgeschützten“ Spalten (was auch immer „schreibgeschützt“ in sql2005 bedeutet).Ich möchte nur eine einzelne Spalte ergreifen und sie in eine Tabelle kopieren.

Dafür muss es eine einfache Möglichkeit geben.Etwas wie:

INSERT INTO database1.myTable columnINeed
SELECT columnINeed from database2.myTable
War es hilfreich?

Lösung

Das Einfügen reicht nicht aus, da versucht wird, neue Zeilen am Ende der Tabelle einzufügen.Es hört sich so an, als würden Sie versuchen, am Ende vorhandener Zeilen eine Spalte hinzuzufügen.

Ich bin mir nicht sicher, ob die Syntax genau richtig ist, aber wenn ich Sie verstanden habe, wird dies das tun, was Sie suchen.

  1. Erstellen Sie die Spalte, die Nullen in Datenbank2 zulässt.

  2. Führen Sie ein Update durch:

    Aktualisieren Sie Datenbank2.dbo.tablename SET Database2.dbo.tablename.colname = database1.dbo.tablename.colname aus database2.dbo.tablename Inner -Join -Join -DataBase1.dbo.tablename auf DataBase2.dbo.tableName.Keycol = database1.dbo.tablename. Keycol

Andere Tipps

Es gibt eine einfache Möglichkeit, die dieser sehr ähnelt, solange sich beide Datenbanken auf demselben Server befinden.Der voll qualifizierte Name ist dbname.unterner.table - Normalerweise ist der Eigentümer DBO und es gibt eine Abkürzung für ".dbo". Was ist "..", also ...

INSERT INTO Datbase1..MyTable
    (ColumnList)
SELECT FieldsIWant
  FROM Database2..MyTable

Erstellen Sie zunächst die Spalte, falls sie noch nicht vorhanden ist:

ALTER TABLE database2..targetTable
ADD targetColumn int null -- or whatever column definition is needed

und da Sie SQL Server 2005 verwenden, können Sie das neue verwenden VERSCHMELZEN Stellungnahme.Der VERSCHMELZEN Die Anweisung hat den Vorteil, dass alle Situationen in einer Anweisung behandelt werden können B. fehlende Zeilen aus der Quelle (kann Einfügungen durchführen), fehlende Zeilen aus dem Ziel (kann Löschvorgänge durchführen), übereinstimmende Zeilen (kann Aktualisierungen durchführen) und alles wird atomar in einer einzigen Transaktion erledigt.Beispiel:

MERGE database2..targetTable AS t
USING (SELECT sourceColumn FROM sourceDatabase1..sourceTable) as s
ON t.PrimaryKeyCol = s.PrimaryKeyCol -- or whatever the match should be bassed on
WHEN MATCHED THEN 
    UPDATE SET t.targetColumn = s.sourceColumn
WHEN NOT MATCHED THEN
    INSERT (targetColumn, [other columns ...]) VALUES (s.sourceColumn, [other values ..])

Die MERGE-Anweisung wurde eingeführt, um Fälle wie Ihren zu lösen, und ich empfehle ihre Verwendung. Sie ist viel leistungsfähiger als Lösungen mit mehreren SQL-Batch-Anweisungen, die im Grunde das Gleiche erreichen, was MERGE in einer Anweisung tut, ohne die zusätzliche Komplexität.

Sie können auch einen Cursor verwenden.Angenommen, Sie möchten alle Datensätze in der ersten Tabelle iterieren und die zweite Tabelle mit neuen Zeilen füllen, dann wäre etwa Folgendes der richtige Weg:

DECLARE @FirstField nvarchar(100)

DECLARE ACursor CURSOR FOR
SELECT FirstField FROM FirstTable 

OPEN ACursor
FETCH NEXT FROM ACursor INTO @FirstField
WHILE @@FETCH_STATUS = 0
BEGIN

   INSERT INTO SecondTable ( SecondField ) VALUES ( @FirstField )

   FETCH NEXT FROM ACursor INTO @FirstField

END

CLOSE ACursor   
DEALLOCATE ACursor

MERGE ist nur in SQL 2008, NICHT in SQL 2005 verfügbar

In Test2.dbo.MyTable (MyValue) einfügen und MyValue aus Test1.dbo.MyTable auswählen

Das setzt eine Menge voraus.Erstens, dass die Zieldatenbank leer ist.Zweitens sind die anderen Spalten nullbar.Möglicherweise benötigen Sie stattdessen ein Update.Dazu benötigen Sie einen gemeinsamen Schlüssel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top