2012-01-06 256 views
0

我有一個存儲過程,爲了這個問題的目的我大大縮小了,但實質上我需要幫助的是這個問題。SQL Server存儲過程參數輸出

如果表xyz中的一行已更新,我需要將ID附加到對方並輸出回調用應用程序。更新按預期工作,問題在於我構建輸出@IPV_ID_Found的方式(請參閱代碼底部的註釋部分)。

@IPV_Status varchar (50), 
@IPV_ID_Found varchar(500) = 'A' OUTPUT 

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

    -- this works for one ID 
    SELECT @IPV_ID_Found = (CAST(@IPV_ID AS VARCHAR(500)))  

    -- this does not work for multiple IDs 
    SELECT @IPV_ID_Found = @IPV_ID_Found + (CAST(@IPV_ID AS VARCHAR(500))) + ',' 

    -- neither does this 
    SET @IPV_ID_Found = @IPV_ID_Found + (CAST(@IPV_ID AS VARCHAR(500))) + ',' 

    SELECT @IPV_ID_Found     
END 
+0

對不起格式化,我把代碼放在代碼塊中,但它沒有佔用...... – RonanC 2012-01-06 10:45:01

+0

嗯......你正在用'ID = @ IPV_ID'更新你的表格 - 這怎麼能導致多個ID是回報?你想報告什麼ID? – 2012-01-06 10:51:52

+1

不存在多個ID:如果您有'UPDATE ... ID = @ IPV_ID','='表示一行。所以給更好的代碼,示例數據 – gbn 2012-01-06 10:59:49

回答

1

看到的變化:

-- 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 
+0

好人!我去了記錄集,忘記了OUTPUT參數的歡呼聲。 – RonanC 2012-01-06 11:29:41

+0

@RananC最好的感謝 - 接受答案8-) – 2012-01-06 11:36:03