Ist es in SQL Server möglich, die „ID“ eines Datensatzes abzurufen, wenn „Insert“ ausgeführt wird?

StackOverflow https://stackoverflow.com/questions/55159

  •  09-06-2019
  •  | 
  •  

Frage

In SQL Server 2005 habe ich ein „id“-Feld in einer Tabelle, dessen Eigenschaft „Ist Identität“ auf „Ja“ gesetzt ist.Wenn also eine Einfügung für diese Tabelle ausgeführt wird, wird die „id“ automatisch auf die nächste inkrementierende Ganzzahl gesetzt.Gibt es eine einfache Möglichkeit, wenn die Einfügung ausgeführt wird, den Wert zu ermitteln, auf den die „id“ festgelegt wurde, ohne direkt nach der Einfügung eine Select-Anweisung ausführen zu müssen?

Duplikat von:
Der beste Weg, um die Identität der eingefügten Zeile zu ermitteln?

War es hilfreich?

Lösung

.Net zumindest können Sie mehrere Anfragen an den Server in einem Rutsch senden. Ich tue dies in meiner App:

command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();

Funktioniert wie ein Zauber.

Andere Tipps

Wenn Sie mehrere Zeilen sind das Einfügen, die Verwendung der OUTPUT und INSERTED.columnname Klausel über die insert Anweisung ist eine einfache Möglichkeit, alle IDs in eine temporäre Tabelle zu bekommen.

DECLARE @MyTableVar table( ID int,  
                               Name varchar(50),  
                               ModifiedDate datetime);  
INSERT MyTable  
        OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar  
SELECT someName, GetDate() from SomeTable  

SCOPE_IDENTITY () ist der bevorzugte Weg, finden Sie unter: 6 verschiedene Möglichkeiten die aktuelle Identität Wert zu erhalten

SCOPE_IDENTITY (); ist die beste Wahl. Und wenn Sie .NET verwenden nur einen unserer Parameter übergeben und den Wert überprüfen, nachdem die Prozedur ausgeführt wird.

CREATE PROCEDURE [dbo].[InsertProducts]
    @id             INT             = NULL OUT,
    @name           VARCHAR(150)    = NULL,
    @desc           VARCHAR(250)    = NULL

AS

    INSERT INTO dbo.Products
       (Name,
        Description)
    VALUES
       (@name,
        @desc)

    SET @id = SCOPE_IDENTITY();

Sie haben die scope_identity () Funktion wählen.

Dieser Code von Anwendung zu tun, ich diesen Vorgang normalerweise kapseln in einer gespeicherten Prozedur, so dass es wie eine Abfrage zu meiner Anwendung sieht immer noch.

Ich neige dazu, lieber einen Trigger an den Tisch befestigt Enterprise Manager. Auf diese Weise brauchen Sie nicht über das Schreiben aus zusätzlichen SQL-Anweisungen in Ihrem Code zu kümmern. Mine in etwa so aussehen:

Erstellen Sie Trigger-tblname auf dbo.tblName für Insert Wie wählen new_id = @@ IDENTITY

Dann aus dem Code, behandeln Sie Ihre Insert-Anweisungen wie wählen statements- Gerade auszuführen und die Ergebnisse zu bewerten. die „newID“ -Spalte die Identität der Zeile enthält soeben erstellt wurde.

Dies ist wahrscheinlich die beste Arbeits Lösung, die ich für SQL Server gefunden .. SQL Server geben den Wert der Identitätsspalte nach Einsatz Aussage

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