2016-06-11 44 views
1

我有一個存儲的過程,它採用一個參數爲DATE。這將從表中返回該日期的數據。存儲過程不會返回任何數據通過的日期

ALTER PROCEDURE [dbo].[UserReportData] 
    @As_ONDATE Datetime 
AS 
BEGIN 
    DECLARE @REPORTDATE datetime   
    --DECLARE @OPENING INT  

    SELECT * 
    INTO #temptable 
    FROM 
     (SELECT 
      a.CUser_id, b.User_Id, a.U_datetime AS REPORTDATE 
     FROM 
      inward_doc_tracking_trl a 
     INNER JOIN 
      user_mst b ON a.CUser_id = b.mkey 
         AND a.U_datetime = @As_ONDATE) AS x 

    DECLARE Cur_1 CURSOR FOR 
     SELECT CUser_id, User_Id FROM #temptable 

    OPEN Cur_1 

    DECLARE @CUser_id INT 
    DECLARE @User_Id INT 

    FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id 

    WHILE (@@FETCH_STATUS = 0) 
    BEGIN 
     SELECT U_datetime 
     FROM inward_doc_tracking_trl       
     WHERE U_datetime = @As_ONDATE      

     UPDATE #temptable 
     SET REPORTDATE = @REPORTDATE 
     WHERE CUser_id = @CUser_id 
      AND User_Id = @User_Id 
      and 

     FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id 
    END 

    CLOSE Cur_1 
    DEALLOCATE Cur_1 

    SELECT * FROM #temptable 

    DROP TABLE #temptable       
END 

當我執行這樣的存儲過程,我沒有得到任何行返回

exec UserReportData '20160610' 

,但在表中我有與該日期行。

像下面的查詢運行

SELECT U_datetime 
FROM inward_doc_tracking_trl  
WHERE u_datetime = '2016-06-10 14:56:11.000' 

因此,執行存儲過程的時候爲什麼沒有返回記錄?

回答

5

因爲你u_datetime列包含日期&時間

一種方法是在WHERE子句中處理

and a.U_datetime >= @As_ONDATE 
AND a.U_datetime < DATEADD(DAY, 1, @As_ONDATE) 

而且你可能要考慮將您的查詢不使用遊標

+0

那裏應該我添加你的答案,我的意思是在哪一部分? '選擇a.CUser_id,b.User_Id,a.U_datetime \t \t \t \t \t \t \t作爲REPORTDATE ....'這裏? – BNN

+0

是的,我在where子句中添加了,它工作正常。非常感謝 – BNN

+0

是的。在'WHERE'子句中 – Squirrel