In SQL Server è possibile ottenere l'"id" di un record quando viene eseguito l'inserimento?
-
09-06-2019 - |
Domanda
In SQL Server 2005 ho un campo "id" in una tabella con la proprietà "Is Identity" impostata su "Sì".Pertanto, quando viene eseguito un inserimento su quella tabella, l'"id" viene impostato automaticamente sul successivo numero intero incrementale.Esiste un modo semplice quando viene eseguito l'Insert per ottenere ciò su cui è stato impostato l'"id" senza dover eseguire un'istruzione Select subito dopo l'Insert?
duplicato di:
Il modo migliore per ottenere l'identità della riga inserita?
Soluzione
Almeno in .Net, puoi inviare più query al server in una volta sola.Lo faccio nella mia app:
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
Funziona come un fascino.
Altri suggerimenti
Se stai inserendo più righe, l'uso di OUTPUT
E INSERTED.columnname
clausola sul insert
L'istruzione è un modo semplice per inserire tutti gli ID in una tabella temporanea.
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() è il modo preferito, vedere: 6 modi diversi per ottenere il valore dell'identità attuale
AMBITO_IDENTITÀ();è la soluzione migliore.E se stai utilizzando .NET, passa semplicemente un nostro parametro e controlla il valore dopo l'esecuzione della procedura.
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();
Devi selezionare la funzione scope_identity().
Per fare ciò dal codice dell'applicazione, normalmente incapsulo questo processo in una procedura memorizzata in modo che sembri ancora una query alla mia applicazione.
Tendo a preferire allegare un trigger alla tabella utilizzando Enterprise Manager.In questo modo non devi preoccuparti di scrivere istruzioni SQL aggiuntive nel tuo codice.Il mio assomiglia a questo:
Crea trigger tblname su dbo.tblname per inserire come seleziona new_id = @@ Identity
Quindi, dall'interno del tuo codice, tratta le istruzioni insert come istruzioni select: esegui e valuta semplicemente i risultati.la colonna "newID" conterrà l'identità della riga appena creata.
Questa è probabilmente la migliore soluzione funzionante che ho trovato per SQL Server.SQL Server restituisce il valore della colonna identità dopo l'istruzione di inserimento