Mit der @@identity-oder Ausgang beim einfügen in die SQL Server-Ansicht?
(verzeihen Sie mir - ich bin neu, sowohl StackOverflow & SQL)
Tl;dr - Bei Verwendung von @@identity
(oder irgendeine andere option wie scope_identity-oder output-variable), ist es möglich, auch einen Blick? Hier ist ein Beispiel einer gespeicherten Prozedur mit @@identity
:
--SNIP--
DECLARE @AID INT
DECLARE @BID INT
INSERT INTO dbo.A (oct1)
VALUES
(@oct1)
SELECT @AID = @@IDENTITY;
INSERT INTO dbo.B (duo1)
VALUES
(@duo2)
SELECT @BID = @@IDENTITY
INSERT INTO dbo.tblAB (AID, BID)
VALUES
(@AID, @BID)
GO
Mehr:
Beim einfügen in eine Tabelle, können Sie erfassen den aktuellen Wert der identity-Samen mit @@identity
. Dies ist nützlich, wenn Sie möchten, legen Sie in der Tabelle A und B ist, erfassen Sie den identity-Wert, dann insert into Tabelle AB über A nach B. dies ist Offensichtlich für Zwecke der Daten-Normalisierung.
Lassen Sie uns sagen, Sie waren zu Abstrakt, das DB-Schema mit ein paar, die führt inner-joins auf die Tabellen mit denen die Daten einfacher, mit zu arbeiten. Wie würden Sie bevölkern die cross-Referenz-Tabellen korrekt in diesem Fall? Kann es getan werden die gleiche Weise, wenn ja, wie?
welche anderen Möglichkeiten haben Sie? ich habe bearbeitet die Frage, um die option für weitere Optionen 🙂
Verwenden Sie OUTPUT-Klausel EINFÜGEN, um den Wert, den Sie gesucht haben. Beispiele finden Sie hier - support.microsoft.com/kb/2019779
Scheint etwas Panikmache zu sagen, vermeiden Sie Sie ganz. Das Problem entsteht erst in parallelen Plänen und ich kann mir nicht vorstellen, dass die Abfragen in der OP wird jemals einen parallelen plan.
Ja, ich Stimme zu. In dem link, den ich in meinem früheren Kommentar hatte ich mentined, "Vermeiden Sie die Verwendung SCOPE_IDENTITY() und @@IDENTITY zur Verfügung wenn Ihr system mit Parallelen Plänen.". Aber während die Veröffentlichung der Antwort vergessen zu erwähnen. Geändert, es jetzt.
InformationsquelleAutor stahler84 | 2012-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vermeiden Sie die Verwendung von @@IDENTITY oder SCOPE_IDENTITY() verwenden, wenn Ihr system mit Parallelen Plänen, da es einen fiesen bug. Bitte beziehen -
http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=328811
Besseren Weg, um zu Holen die eingefügten Identity-ID wäre die Verwendung von OUTPUT-Klausel.
EDIT:
Es funktionieren würde, mit Blick auf sowie. Bitte siehe das Beispiel unten. Hoffe, das ist, was Sie gesucht haben.
Danke Mann! Letzte Frage, wenn Sie dies sehen - Was, wenn Sie machen eine Sicht auf mehrere Tabellen, die miteinander verbunden sind (inner join)? Ausgegeben wird immer noch funktionieren, es in diesem Fall?
InformationsquelleAutor vmvadivel
@@IDENTITY liefert den letzten IDENTITY-Wert, hergestellt auf einer Verbindung, unabhängig von der Tabelle, erzeugt den Wert und unabhängig vom Umfang der Aussage, erzeugt den Wert.
SCOPE_IDENTITY() liefert den letzten IDENTITY-Wert produziert, der auf eine Verbindung und eine Anweisung, die in dem gleichen Umfang, unabhängig von der Tabelle, erzeugt den Wert. SCOPE_IDENTITY () @@IDENTITY, wird wieder die Letzte identity-Wert in der aktuellen Sitzung erstellt, aber es wird auch beschränken Sie Ihre aktuellen Bereich als auch
Obwohl das Problem mit dieser behoben ist, indem Sie microsoft , würde ich vorschlagen, Sie sollten gehen Sie mit "AUSGANG", und ja, es kann verwendet werden, mit Aussicht
das Vergnügen ist ganz auf meiner Seite.Dank
InformationsquelleAutor NG.