Ich nehme einige Zeilen aus einer Tabelle, manipuliere sie in einer temporären Tabelle und suche dann, sie als neue Zeilen in meine ursprüngliche Tabelle einzufügen.Einfügen aus einer temporären Tabelle in eine Tabelle mit Identitätsspalte
Ich habe jedoch ein Problem mit der Identitätsspalte, auch wenn ich nicht die Identitätsspalte auf meiner temporären Tabelle habe. Die Identitätsspalte ist ein automatisch inkrementierender Int.
Dies scheint wie eine einfache Sache, die ich übermäßig denke.
select top 0 *
into #TestTable
from OriginalTable;
...
--insert and manipulate records
...
ALTER TABLE #TestTable
DROP COLUMN MyIdentityColumn;
DECLARE @InsertedRows TABLE (NewSeqNum INT);
INSERT INTO OriginalTable
OUTPUT MyIdentityColumn INTO @InsertedRows(NewSeqNum)
SELECT * FROM #TestTable
aber ich bekomme diese Fehlermeldung:
An explicit value for the identity column in table 'OriginalTable' can only be specified when a column list is used and IDENTITY_INSERT is ON.
ich absolut nicht wollen, einen expliziten Wert setzen, ich habe es mir die neue Identität einfügen möchten, und geben (über @InsertedRows
)
Verwenden Sie nicht * als Werte. Sie müssen die Spalten explizit angeben. In Ihrem Fall schlägt dies fehl, da der Parser nicht jeden Schritt logisch bewertet. Es denkt immer noch, dass MyIdentityColumn eine Spalte von #TestTable ist und denkt, dass Sie versuchen, es einzufügen. Sei explizit in deinem Code. Geben Sie die Spalten in der INSERT-Anweisung UND in der Select-Anweisung an, die Sie für die Werte verwenden. –
@SeanLange gibt es eine dynamische Möglichkeit, das zu tun? Kann ich die Spaltennamen aus dem Schema ohne die Ident-Spalte auswählen und diese anstelle von "*" verwenden, oder bin ich buchstäblich dabei, sie alle aufzulisten? –
Sie sollten IMMER die Spalten auflisten. Wenn es sich um eine große Anzahl von Spalten handelt, können Sie den Spalten- "Ordner" in SSMS in ein Abfragefenster ziehen. Alles andere als die Spalte, die explizit aufgelistet ist, ist faul und anfällig für Fehler auf der Straße, wenn sich die Tabelle ändert. –