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时发现它完全按照我想要的方式工作。