2 votes

scope_identity retourne null

J'écris un SP dans le serveur SQL

ALTER PROCEDURE [dbo].[spAddUserBadge]
AS
BEGIN
    INSERT INTO dbo.SE_UserBadge
    (    
        [UID],
        BadgeID,
        BadgeAssignmentOrRenewalDate,
        BadgeExpiryDate ,
        AmountPaid, 
        Remarks ,
        AssignedBy          
    )
    VALUES
    (
        17,1, 12-12-2012, 12-12-2013, 0.00, '', ''
    )

    SELECT SCOPE_IDENTITY() AS id    
END
GO

SCOPE_IDENTITY est considéré comme NULL. Où est-ce que je me trompe ?

4voto

bendataclear Points 2279

Utilisez le SORTIE pour sortir les valeurs insérées dans une variable de tableau et les vérifier.

Exemple

ALTER PROCEDURE [dbo].[spAddUserBadge]
AS
BEGIN
    DECLARE @TBL AS TABLE(ID1 INT, ID2 INT)

    INSERT INTO dbo.SE_UserBadge
    (    
        [UID],
        BadgeID,
        BadgeAssignmentOrRenewalDate,
        BadgeExpiryDate ,
        AmountPaid, 
        Remarks ,
        AssignedBy          
    )
    OUTPUT inserted.ID1, inserted.ID2 INTO @TBL
    VALUES
    (
        17,1, 12-12-2012, 12-12-2013, 0.00, '', ''
    )

    SELECT * FROM @TBL  
END
GO

3voto

twoleggedhorse Points 2370

Le scope_identity ne renverra une valeur que s'il existe un champ d'identité, vérifiez que vous avez un champ d'identité.

Malheureusement, vous ne pouvez pas modifier une colonne existante pour en faire un champ d'identité en utilisant sql. Pour ce faire, vous devez créer une nouvelle colonne en utilisant quelque chose comme ALTER TABLE dbo.SE_UserBadge ADD column name INT IDENTITY(1,1). Ensuite, vous devez transférer toutes les valeurs existantes en utilisant IDENTITY_INSERT dbo.SE_UserBadge ON avec une instruction de mise à jour. Ensuite, vous pouvez supprimer l'ancienne colonne.

Vous pouvez également utiliser la vue du concepteur dans SSMS si la table n'est pas trop grande.

0voto

luis_laurent Points 316

D'après ce que je vois, vous fournissez une valeur pour votre colonne ID dans votre instruction d'insertion, si vous voulez obtenir l'ID en sélectionnant scope_identity, vous devez définir votre ID comme clé primaire de l'identité.

Voici cet exemple lorsque vous créez votre table.

CREATE TABLE Person
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    Name VARCHAR(20),
    LastName VARCHAR(20),
)

Ensuite, dans votre procédure stockée, vous n'avez pas besoin de fournir l'ID, il sera généré automatiquement.

INSERT INTO Person (Name,LastName) VALUES ('YouName','YourLastName')

SELECT SCOPE_IDENTITY() AS ID 

J'espère que cela vous conviendra.

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