Sybase Sql 查询未返回错误

Sybase Sql query not returning error

在 Sybase SQL 查询中使用多个 table 和多个变量进行查询时,结果不是我所期望的。

我的 table 不完整而且不应该是完整的,其中大部分可以接收 NULL 作为值(我知道 NULL 不是一个值但是让我们只考虑这个查询,这是不是问题的重点)而且它永远不会完成。

众所周知,我的查询相当简单,它要求用户提供一些他不需要填写的过滤器,如果他只是想要更多 "open search"。在使用此查询进行测试时,我意识到其中一个过滤器不起作用,即使我填充了它,它仍然会 return 值,就好像用户从未填充过过滤器一样。经过进一步的预期,我意识到调用来进行查询的函数缺少该过滤器,所以我去更改了它。

    SELECT * FROM 
    CONTROL C, 
    MARKET_CONTROL MC, 
    STORAGE_CONTROL SC
    WHERE c.item_control = mc.item_control
    AND c.item_code = isnull(@itemCode,item_code)  @itemCode is one of the filters
    AND c.item_baseline = isnull(@itemBaseline, item_baseline)
    AND c.item_quantity = sc.item_quantity
    AND c.item_storage = sc.item_storage
    AND others, the list goes on.

当其他人在工作时,如果我不提供过滤器信息,它会忽略它并自己搜索,returning 所有可能的值对吗?我的意思是,ISNULL 函数可以这样翻译:

    if @itemBaseline IS NULL then
    c.item_baseline = c.item_baseline
    else
    c.item_baseine = @itemBaseline

对吗?

好吧,我不是要 return null 或任何东西,我也不是要让它自己搜索以便我可以 return 一切。但是 item_baseline 可以添加到控件 table 而无需任何信息(给它 NULL 值 [再次,让我们忽略它,只是想让它更容易理解])。然而,查询的结果并不是 returning itemBaseline 上的所有内容,而是像用户选择的 IS NOT NULL 一样工作。 我不是想在查询中 return null,我只想让它成为 return 每种可能性。

PS:我正在使用基于 Sybase 的 SQLdbx 3.12。 PS2:我试过使用 isnull 函数的替代方法,例如 coalesce,但它仍然不起作用。

您的变量似乎在执行此查询期间未定义。我自己做了个小实验:

CREATE TABLE #temp
(
    a INT NULL,
    b INT NULL
)

INSERT #temp 
SELECT 1, NULL
UNION 
SELECT 2, 2

DECLARE @b INt
SELECT @b = 2

SELECT * FROM #temp
WHERE 
b = isnull(@b,b)

输出被正确过滤,如果您评论@b (--SELECT @b = 2) 的定义,您将得到完整的 table。 GL.