Sql server SQL Server存储过程参数输出

Sql server SQL Server存储过程参数输出,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个存储过程,为了解决这个问题,我已经对它进行了大幅缩减,但本质上,我需要帮助解决的问题是这个 如果表xyz中的一行被更新,我需要将ID追加到彼此,并输出回调用应用程序。更新按预期工作,问题在于我构建输出的方式@IPV\u ID\u Found(请参阅代码底部的注释部分) 请参见更改: -- this does not work for multiple IDs SELECT @IPV_ID_Found = @IPV_ID_Found + ',' + (CAST(@IPV_ID AS

我有一个存储过程,为了解决这个问题,我已经对它进行了大幅缩减,但本质上,我需要帮助解决的问题是这个

如果表
xyz
中的一行被更新,我需要将ID追加到彼此,并输出回调用应用程序。更新按预期工作,问题在于我构建输出的方式
@IPV\u ID\u Found
(请参阅代码底部的注释部分)

请参见更改:

 -- this does not work for multiple IDs
  SELECT @IPV_ID_Found = @IPV_ID_Found + ',' + (CAST(@IPV_ID AS VARCHAR(500))) 
然后您将得到一个串联的值列表,如
1,2,3,4,5

但是如果需要返回记录集,则不需要输出参数,而是使用表变量:

declare @IPV_ID_Found table(Item varchar(500))

IF (@IPV_Status ='closed')
BEGIN
UPDATE TEST_TBL
 SET
    Status  = 'xyz',        
 WHERE                  
    ID      =  @IPV_ID 

  -- this works for one ID
  insert @IPV_ID_Found 
  VALUES (CAST(@IPV_ID AS VARCHAR(500)))    

  -- this does not work for multiple IDs
  INSERT @IPV_ID_Found 
  VALUES (CAST(@IPV_ID AS VARCHAR(500)))

  SELECT Item FROM @IPV_ID_Found                  
END

很抱歉格式化了,我把代码放在了代码块中,但没有花……嗯。。。您正在用
ID=@IPV\u ID
更新您的表-这怎么会导致多个ID被报告回来??你想报告什么ID?没有多个ID:如果你有
UPDATE。。。ID=@IPV_ID
=
表示一行。因此,请给出更好的代码,示例dataHi Marc,我正在将一个逗号delimetered的id varchar传递给存储的进程,提取将它们存储在临时表中的id,然后使用临时表的大小作为循环来进行更新。更新很好,问题在于我构建输出的方式(我认为)。好人!!!我使用了记录集,忘记了输出参数cheers。
declare @IPV_ID_Found table(Item varchar(500))

IF (@IPV_Status ='closed')
BEGIN
UPDATE TEST_TBL
 SET
    Status  = 'xyz',        
 WHERE                  
    ID      =  @IPV_ID 

  -- this works for one ID
  insert @IPV_ID_Found 
  VALUES (CAST(@IPV_ID AS VARCHAR(500)))    

  -- this does not work for multiple IDs
  INSERT @IPV_ID_Found 
  VALUES (CAST(@IPV_ID AS VARCHAR(500)))

  SELECT Item FROM @IPV_ID_Found                  
END