无法执行存储过程

Not able to execute the stored procedure

我有 table,其中我的日期列值也随时间一起保存

像这样2016-06-10 14:56:11.000

现在,在执行我的 SP 时,我像这样 exec UserReportData '06-10-2016' 传递了一个参数作为日期,但它没有显示任何记录。因为它在 table.

中有 4 条记录

为什么?

更新

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

    SELECT * 
    INTO #temptable
    FROM
        (SELECT DISTINCT
             a.CUser_id, b.User_Id,a.U_datetime as REPORTDATE, 
             b.first_name + ' ' + b.last_name AS USERNAME,
             0 OPENING, 0 TOTAL_DOCUMENT, 0 INWARD, 0 FIRST_LEVEL_PROCESSING, 0 DATA_ENTRY
         FROM 
             inward_doc_tracking_trl a, user_mst b
         WHERE
             a.CUser_id = b.mkey
             AND a.U_datetime = CONVERT(varchar(10), @As_ONDATE, 103)) 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 @REPORTDATE  
        FROM inward_doc_tracking_trl                        
        WHERE U_datetime = CONVERT(varchar(10), @As_ONDATE, 103)

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

        FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id
    END

    CLOSE Cur_1
    DEALLOCATE Cur_1

    SELECT * 
    FROM #temptable

    DROP TABLE #temptable
END

您将日期作为字符串传递(隐式时间为 00:00),您将其转换为日期,但时间仍为 00:00,并尝试将日期与次。由于时间不匹配,不会有任何结果。

您必须:

  1. 将日期时间转换为日期以匹配准确的日期(不好,需要重新计算列中的每个日期)
  2. 将搜索更改为在日期 + '00:00' 到日期 + '23:59' 之间查找(或者如果您愿意,可以添加一天)

更新您的 where 子句以采用简单的选项 2:

where a.CUser_id = b.mkey
   and a.U_datetime BETWEEN CONVERT(varchar(10), @As_ONDATE, 103) 
                    AND DATEADD(day, 1, CONVERT(varchar(10), @As_ONDATE, 103))