SQL Server查询仅在没有变量为空的情况下有效

时间:2018-09-10 15:05:04

标签: php sql sql-server

我正在尝试创建一个查询,该查询将基于不同的HTML下拉选择来过滤表。我有5个单独的下拉菜单,每当进行选择时,该值就会传递到查询中(并存储到清除之前),该查询将填充页面上的数据。但是,此查询仅在所有选择均完成后才显示数据。我也没有看到任何错误。有人可以向我解释为什么会发生这种情况,并提供解决方案,无论选择了多少下拉列表,它都可以在哪里显示数据?

LSSupportsOpeningDocumentsInPlace = YES

3 个答案:

答案 0 :(得分:4)

检查变量的长度而不是字段的长度

代替

WHERE ([Collector Name] = '$q' OR datalength([Collector Name]) = 0)

应该是:

WHERE ([Collector Name] = '$q' OR datalength('$q') = 0)
                                             ^^^^

答案 1 :(得分:0)

我不熟悉php,但对于sql,我认为您首先需要检查变量是否不为null,然后使用它,也许在您的php代码中,如果未选择该值,则可以将其默认为null。

SELECT
    [Customer]
   ,[Collector Name]
   ,[Bill Date]
   ,[Days Until Next Action]
   ,[Next Action]
   ,[Next Bill Date]
   ,[Billed Status]
   ,[Billed Amount]
   ,[Total Current Balance]
   ,CAST([Payment Due Date] AS DATE) AS [Payment Due Date]
   ,[Notes]
   ,[Payment Status]
   ,[Line Status]
FROM [Test_Spec_Bill]
WHERE (
('$q' IS NOT NULL
AND [Collector Name] = '$q')
OR DATALENGTH([Collector Name]) = 0
)
AND (('$date' IS NOT NULL
AND [Date Group - Filter] = '$date')
OR DATALENGTH([Date Group - Filter]) = 0
)
AND (('$val' IS NOT NULL
AND [Billed Status] = '$val')
OR DATALENGTH([Billed Status]) = 0
)
AND (('$rep' IS NOT NULL
AND [Parent Report Code] = '$rep')
OR DATALENGTH([Parent Report Code]) = 0
)
AND (('$group' IS NOT NULL
AND [Balance Group - Filter] = '$group')
OR DATALENGTH([Balance Group - Filter]) = 0
)

答案 2 :(得分:0)

logs永远不会将NULL值评估为零,因为对于$ git submodule init $ git submodule update --remote 值,DATALENGTH = 0返回NULL。您可以在发送查询之前处理DATALENGTH个值,或者像这样使用NULL简单地评估NULL的情况为真。

NULL