Je construis une instruction dynamique d'insertion dans une procédure stockée. p>
I Construire la syntaxe SQL dans une variable puis l'exécute avec L'insert SQL fonctionne bien, mais quand j'exécute Comment puis-je capturer cela? Dois-je envelopper dans le EXEC (@varchavariable) code>. p>
SET @Record_id = Scope_Identity () Code> Ensuite, je n'ai pas de valeur. p>
exécuté code>? P>
3 Réponses :
Oui, il devrait faire partie d'une SQL dynamique qui est la portée_Identity () pour P>
Exemple de base, en utilisant sp_executesql
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