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?

Besser vermeiden Sie die Verwendung von @@auf dem Gebiet der Computerkriminalität oder Scope_identity(). Es gibt einen fiesen bug im Zusammenhang mit it - vadivel.blogspot.in/2012/02/...
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

Schreibe einen Kommentar