2016-06-11 40 views
-1

我有一個SP,這給了我兩個記錄(2名),如下面如何在光標運行循環爲每個用戶

SP loop

現在,

我想要的是循環每個用戶使用cursor並顯示其數據從表中的日期是通過參數

以下是我的S P.

ALTER PROCEDURE GET_USER_REPORT_DATA 
     @From_Date datetime, 
     @To_Date datetime 

    AS 
    BEGIN 

     Select * into #GetUserTable 
      from 
       (
         select distinct a.N_UserMkey, b.mkey, 
         b.first_name + ' ' + b.last_name NAME from inward_doc_tracking_trl a inner join user_mst b on 
         a.N_UserMkey = b.mkey 
         where a.U_datetime between @From_Date and @To_Date     
       ) as xx  

    DECLARE @N_Usermkey int, @mkey int, @NAME varchar  
     DECLARE UserCursor CURSOR FOR 
      select distinct a.N_UserMkey, b.mkey, 
         b.first_name + ' ' + b.last_name NAME from inward_doc_tracking_trl a inner join 
         user_mst b on a.N_UserMkey = b.mkey 
         where a.U_datetime between @From_Date and @To_Date 
     OPEN UserCursor 

    FETCH NEXT FROM vendor_cursor 
      INTO @N_Usermkey, @mkey, @NAME 

     -- need to run loop for each user 

      SELECT * FROM #GetUserTable 
         DROP TABLE #GetUserTable 
    END 

GO

我如何使用cursor不知道請讓我知道

+4

該邏輯不需要使用遊標。只有在需要時才應該使用遊標。 –

+0

@GordonLinoff:所以如果沒有光標,怎麼可能用每個用戶的'mkey'來循環所有的相關數據呢? – BNN

+0

[無法將NULL值插入'USERNAME'列,表'tempdb.dbo。#temptable error]'的可能重複(http://stackoverflow.com/questions/37760849/cannot-insert-null-values-into-column- username-table-tempdb-dbo-temptable -e) –

回答

2

你不需要爲此光標在所有簡單的選擇查詢應該是足夠了...

select a.N_UserMkey 
     ,b.mkey 
     ,ISNULL(b.first_name + ' ','') + ISNULL(b.last_name,'') NAME 
from inward_doc_tracking_trl a 
inner join user_mst b on a.N_UserMkey = b.mkey 
where a.U_datetime between @From_Date and @To_Date 
+0

謝謝,但我已經在我的臨時表中使用了它,它給了我相應的記錄。但是,你能告訴我如何繼續用循環來檢查每個用戶是否存在傳遞日期的記錄 – BNN

+0

你的'WHERE'子句已經這樣做了,你不需要一個光標。 –

+0

是的,你的權利。將與我的老人確認,明天繼續。需要去祈禱。 bye tc – BNN