SQL where子句未被筛选

SQL where子句未被筛选,sql,sql-server,Sql,Sql Server,我有以下查询,但它没有考虑到p.created_by=@searchBywhere子句中的问题,即如何更正它,以便根据@searchBy对结果进行过滤 ALTER PROC [dbo].[Rptcashcollectionouter] @branchId INT, @searchBy INT, @strDate DATETI

我有以下查询,但它没有考虑到
p.created_by=@searchBy
where子句中的问题,即如何更正它,以便根据@searchBy对结果进行过滤

ALTER PROC [dbo].[Rptcashcollectionouter] @branchId INT, 
                                          @searchBy INT, 
                                          @strDate  DATETIME=NULL, 
                                          @endDate  DATETIME=NULL 
AS 
  BEGIN 
      SELECT DISTINCT p.created_on AS paid_date 
      FROM   reading re 
             JOIN billing_gen bg ON re.id = bg.reading_id 
             JOIN customer_registration cr ON bg.account_number = cr.account_number 
             JOIN payment p ON bg.bill_number = p.bill_number 
             JOIN customer_category cc ON cr.customer_category_id = cc.id 
      WHERE  p.created_by = @searchBy 
             AND ( ( @strDate IS NULL ) 
                    OR Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME) >= 
                       Cast(Floor(Cast(@strDate AS FLOAT)) AS DATETIME) ) 
             AND ( ( @endDate IS NULL ) 
                    OR Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME) <= 
                       Cast(Floor(Cast(@endDate AS FLOAT)) AS DATETIME) ) 
             AND cr.branch_id = @branchId 
      ORDER  BY p.created_on ASC; 
  END; 
ALTER PROC[dbo].[Rptcashcollectionouter]@branchId INT,
@按INT搜索,
@标准日期时间=NULL,
@endDate DATETIME=NULL
像
开始
选择“按付款日期创建”的不同p
从重新阅读
在re.id=bg.reading\u id上加入计费\u gen bg
在bg.account\u number=cr.account\u number上加入客户注册cr
在bg.bill\u编号=p.bill\u编号上加入付款p
在cr上加入客户类别cc。客户类别id=cc.id
其中p.created_by=@searchBy
和(@strDate为空)
或转换为日期时间(Floor(转换(p.created_on AS FLOAT))>=
铸造(地板(铸造(@strDate作为浮动))作为日期时间)
和(@endDate为空)

或Cast(Floor(Cast(p.created_on AS FLOAT))AS DATETIME)检查程序中的值,如下所示

SELECT @branchId, @searchBy, @strDate,@endDate
然后尝试使用相同的值手动运行SQL。另外,确保表中有符合条件的数据

还有,你到底在尝试什么

Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME)
  • 执行过程时,请确保正确传递值

  • 打印即将出现的所有值(仅用于测试)

  • @searchBy INT是整数类型。但我认为“p.created_by=@searchBy”是一种日期时间或日期类型,因此它在这里也可能冲突,或者显示错误的结果。在下面的行中,p.created_by被视为日期时间或日期,而@searchBy是整数

    其中p.created_by=@searchBy


  • 样本数据和预期结果肯定会有帮助否是一个int,它持有创建工资的员工id如果p.created_by是一个int(即持有员工id),那么您在这里做什么?“Cast(Floor(Cast(p.created_on AS FLOAT))AS DATETIME”。解释它或发送一些示例数据,以便我可以执行和检查。p.created_on是用户idOk Hamza创建的日期p.created_,现在只需手动检查表中是否有数据(根据此条件)或者不是。除了数据,我觉得一切都是正确的。但是数据没有问题,只是在我从查询中删除select distinct时发现它完全按照我想要的方式工作。