[英]EXEC sp_executesql - capture RETURN value and OUTPUT value from stored procedure call
[英]sp_executesql return id on insert in stored procedure
我創建了一個動態存儲過程,該過程可以從特定表中進行更新,插入和刪除:
CREATE PROCEDURE dbo.Pj_Change
@Action Varchar(20),
@TableName Varchar(20),
@InsertQuery Nvarchar(max),
@UpdateQuery Nvarchar(max),
@Where Varchar(50)
AS
BEGIN
DECLARE @SQLString nvarchar(max);
SET NOCOUNT ON
IF(@Action = 'UPDATE')
SET @SQLString = 'UPDATE '+@TableName+' SET '+@UpdateQuery+' WHERE ('+@Where+')';
ELSE IF(@Action = 'INSERT')
SET @SQLString = 'INSERT INTO '+@TableName+' '+@InsertQuery + ';
ELSE IF(@Action = 'DELETE')
SET @SQLString = 'DELETE FROM '+@TableName+' WHERE ('+@Where+')';
EXECUTE sys.sp_executesql @SQLString
END
問題是,比我嘗試將SELECT SCOPE_IDENTITY()
添加到此代碼中以在插入時獲取新行的ID時,我的輸出為-1。 我所做的更改是:
@SQLString = 'INSERT INTO '+@TableName+' '+@InsertQuery + '; SELECT SCOPE_IDENTITY()';
我需要進行哪些更改才能使其正常工作?
沒關系,無論如何您都不應該使用scope_identity
。 您擁有更現代的構造,例如:
update ... set ... output updated.id where ... -- same for insert and delete
您可以將結果輸出到表中(單個插入不需要),也可以使用上述簡單形式,並讓update
語句充當select
並返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.