2014-04-17 63 views
-2
DECLARE MAP_CURSOR CURSOR FOR 
    select C.OBJECT,C.CLAIM,RELID 
      from EPM_ E WITH (NOLOCK) 
      join #ABCD C WITH (NOLOCK) 
      on E.RELID = C.OBJECT 

OPEN MAP_CURSOR 
FETCH NEXT FROM MAP_CURSOR INTO @OBJECT,@CLAIM 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
     BREAK 
    END 
    IF @@FETCH_STATUS <> 0 
     BEGIN 
      SET @PAYMENT_ID = (SELECT PAYMENT_ID FROM PAYMENT 
            WHERE CLAIM = @OBJECT) 
     END 

FETCH NEXT FROM MAP_CURSOR INTO @OBJECT,@CLAIM 
CLOSE MAP_CURSOR 
DEALLOCATE MAP_CURSOR 

我試圖找到,如果所有的ID存在於表與表EPM匹配使用遊標,則需要結束否則需要從支付表paymentid來處理它。在存儲過程中

任何人都可以幫我解決它嗎?

+3

爲什麼你甚至使用光標? – Crono

+0

循環每一行以檢查它是否與epm表匹配,如果需要結束,否則將繼續進一步處理 – user3546195

+0

仍然不清楚爲什麼你希望光標執行該操作。無論如何,你的第二個'FETCH NEXT'語句需要在你的循環中。 – Crono

回答

0

根據您的評論,這將獲得沒有與#ABCD相關的epm記錄的所有付款。它還會顯示您的臨時表中沒有數據付款的位置。

SELECT c.*,p.* 
FROM #ABCD C 
left join EPM_ E on E.RELID = C.OBJECT 
left join PAYMENT p on p.CLAIM=C.OBJECT 
where E.RELID is null 
+0

不,它不爲空。 relid是epm表 – user3546195

+0

的主鍵,其中E.RELID爲空表示支付沒有相關記錄。 – UnhandledExcepSean

+0

是的,這是正確的。 RELID不是NULL,因爲它是epm表中的主鍵 – user3546195