Frage

Ich habe zwei Tabellen hat die ersten einen Primärschlüssel, eine Identität, die zweiten einen Primärschlüssel hat, die nicht ist, aber das Schlüssel hat einen Fremdschlüssel zurück zu der Primärschlüssel der ersten Tabelle.

Wenn ich einen Datensatz zu einem Zeitpunkt am Einsetzen kann ich die SCOPE_IDENTITY verwenden Sie den Wert für die pk eingefügt bekommen nur in Tabelle 1, die ich will in die zweite Tabelle einzufügen.

Mein Problem ist, ich wählt viele Datensätze kommen ich in beiden Tabellen eingefügt werden soll, habe ich nicht in der Lage gewesen, aus einer Reihe basiert, so zu denken, diese Einsätze zu tun.

Meine aktuelle Lösung ist, einen Cursor zu verwenden, in der ersten Tabelle einfügen, erhalten Schlüssel scope_identity verwenden, legen Sie in die zweite Tabelle, zu wiederholen.

Bin ich eine Nicht-Cursor-Lösung fehlt?

War es hilfreich?

Lösung

Ja, schaut die Ausgabe-Klausel in der Onlinedokumentation auf.

Andere Tipps

hatte ich dieses Problem nur diese Woche: jemand eine Tabelle mit einem bedeutungslosen Ersatzschlüssel in das Schema eingeführt hatte, wo natürlich Schlüssel verwendet werden. Kein Zweifel, ich dies bald beheben würde :) bis dahin arbeite mich um es durch eine Tabelle von Daten Erstellen von INSERT: Dies ist eine permanente oder temporäre Basistabelle oder eine abgeleitete Tabelle (siehe unten) sein könnte, was passen soll Ihr Wunsch nach einer Set-basierten Lösung sowieso. Verwenden Sie zwischen dieser Tabelle und die Tabelle mit der IDENTITY Spalte auf dem natürlichen Schlüssel eine Verknüpfung, um die automatisch generierten Werte zu erfahren. Hier ist ein kurzes Beispiel:

CREATE TABLE Test1 
(
 surrogate_key INTEGER IDENTITY NOT NULL UNIQUE, 
 natural_key CHAR(10) NOT NULL CHECK (natural_key NOT LIKE '%[^0-9]%') UNIQUE
);

CREATE TABLE Test2
(
 surrogate_key INTEGER NOT NULL UNIQUE
    REFERENCES Test1 (surrogate_key), 
 data_col INTEGER NOT NULL
);

INSERT INTO Test1 (natural_key)
SELECT DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col);

INSERT INTO Test2 (surrogate_key, data_col)
SELECT T1.surrogate_key, DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col)
       INNER JOIN Test1 AS T1
          ON T1.natural_key = DT1.natural_key;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top