2010-04-26 3 views
4

Ici, j'ai une procédure stockée qui insère une ligne, mais comment faites-vous le retourner le dernier id Inséré sans faire une autre requêteComment faire une procédure stockée retourne le dernier identifiant Inséré

CREATE PROCEDURE [dbo].[spInsertCriteriaItem] 
@GroupID int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    insert into CriteriaItem (CriteriaGroupID) VALUES(@GroupID) 
    --I don't want to make another query here 
END 

Est-il possible de faites ceci

+3

et pourquoi ne voulez-vous pas faire une autre requête après l'insertion? Je suppose que vous faites spécifiquement référence à SELECT SCOPE_IDENTITY() '? –

Répondre

5

En utilisant Sql Server, vous pouvez utiliser la clause OUTPUT.

Quelque chose comme

DECLARE @CriteriaItem TABLE (
     ID INT IDENTITY (1,1), 
     CriteriaGroupID INT 
) 
insert into @CriteriaItem (CriteriaGroupID) 
OUTPUT INSERTED.ID 
VALUES(1) 
4

dunno ce que votre affaire est sans avoir une requête supplémentaire, mais si vous voulez des données à partir d'une base de données, vous devez l'interroger.

CREATE PROCEDURE [dbo].[spInsertCriteriaItem] 
@GroupID int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    insert into CriteriaItem (CriteriaGroupID) VALUES(@GroupID); 
    SELECT SCOPE_IDENTITY(); 
END 
0

Pourquoi ne voulez-vous pas faire une autre requête?

CREATE PROCEDURE [dbo].[spInsertCriteriaItem] 
@GroupID int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    insert into CriteriaItem (CriteriaGroupID) VALUES(@GroupID); 
    SELECT @@IDENTITY AS InsertedId; 
END 
Questions connexes