2016-06-11 48 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