簡體   English   中英

sp_executesql在存儲過程中插入時返回ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM