76 votes

SQL: Comment faire pour obtenir l'id de valeurs j'ai juste Inséré?

J'ai inséré quelques valeurs dans un tableau. Il y a une colonne dont la valeur est auto-généré. Dans la prochaine déclaration de mon code, je veux récupérer cette valeur.

Pouvez-vous me dire comment faire de la bonne façon?

56voto

SQLMenace Points 68670

@@IDENTITY n'est pas portée en sécurité et vous renvoie l'id d'une autre table si vous avez un déclencheur insert sur la table d'origine, utilisez toujours de l' SCOPE_IDENTITY()

29voto

David Basarab Points 25852

C'est la façon dont je fais mon procédures de la banque pour MSSQL avec un ID généré automatiquement.

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();

14voto

UnkwnTech Points 21942

Si votre utilisation de PHP et de MySQL, vous pouvez utiliser le mysql_insert_id() fonction qui va vous raconter l'ID de l'élément que vous venez de instered.
Mais sans votre Langue et de votre SGBD, je suis juste prise de vue dans l'obscurité ici.

14voto

Daniel Schaffer Points 14707

Cela fonctionne très bien dans SQL 2005:

DECLARE @inserted_ids TABLE ([id] INT);

INSERT INTO [dbo].[some_table] ([col1],[col2],[col3],[col4],[col5],[col6])
OUTPUT INSERTED.[id] INTO @inserted_ids
VALUES (@col1,@col2,@col3,@col4,@col5,@col6)

Il a l'avantage de renvoyer tous les Id si votre instruction INSERT insère plusieurs lignes.

11voto

Slartibartfast Points 5469

Encore une fois, aucune langue agnostique réponse, mais en Java, il va comme ceci:

Connection conn = Database.getCurrent().getConnection();  
PreparedStatement ps =  conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);
try {  
    ps.executeUpdate();  
    ResultSet rs = ps.getGeneratedKeys();  
    rs.next();  
    long primaryKey = rs.getLong(1);  
} finally {  
    ps.close();  
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X