6
votes

Comment obtenir Scope_Identity () à partir de l'instruction INSERT RUN IN EXEC ()

Je construis une instruction dynamique d'insertion dans une procédure stockée.

I Construire la syntaxe SQL dans une variable puis l'exécute avec EXEC (@varchavariable) .

L'insert SQL fonctionne bien, mais quand j'exécute SET @Record_id = Scope_Identity () Ensuite, je n'ai pas de valeur.

Comment puis-je capturer cela? Dois-je envelopper dans le exécuté ?


0 commentaires

3 Réponses :


0
votes

Oui, il devrait faire partie d'une SQL dynamique qui est la portée_Identity () pour


0 commentaires

15
votes

Exemple de base, en utilisant sp_executesql xxx


0 commentaires

2
votes

Vous pouvez essayer cela aussi .....

CREATE PROCEDURE [dbo].[SaveSingleColumnValueFromGrid]
(
    @TableName VARCHAR(200),
    @ColumnName VARCHAR (200),
    @CompareField VARCHAR(200),
    @CompareValue VARCHAR(200),
    @NewValue VARCHAR(200),
    @Result INT OUTPUT
)
AS
BEGIN
    DECLARE @SqlString NVARCHAR(2000),
            @id INTEGER = 0;


    IF @CompareValue = ''
        BEGIN

            SET @SqlString = 'INSERT INTO ' + @TableName + ' ( ' + @ColumnName +  ' )  VALUES ( ''' + @NewValue + ''' ) ; SELECT @id = SCOPE_IDENTITY()';
            EXECUTE sp_executesql @SqlString, N'@id INTEGER OUTPUT',  @id OUTPUT
        END
    ELSE
        BEGIN
            SET @SqlString = 'UPDATE ' + @TableName + ' SET ' + @ColumnName +  ' = ''' + @NewValue + '''  WHERE ' + @CompareField +  ' = ''' + @CompareValue + '''';
            EXECUTE sp_executesql @SqlString
            set @id = @@ROWCOUNT
        END


    SELECT @Result = @id
END


0 commentaires