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.
在 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.