gpt4 book ai didi

SQL Server 2005 : Select statement in ISNULL condition

转载 作者:行者123 更新时间:2023-12-03 03:09:47 24 4
gpt4 key购买 nike

环境:SQL Server 2005

我有一个存储过程,它在一个参数中接收逗号分隔的值。我在 SQL 中编写了一个表值 UDF 函数来打破它并将其作为表返回给我。我使用该值来过滤存储过程的 where 子句中的数据。一切工作正常,直到传递给存储过程的逗号分隔变量中有 NULL。我想以这样的方式编写 where 子句:如果传递的变量为 NULL,则不应使用 Split 函数。这是我在存储过程中所做的事情。

Declare @list varchar(100), @Col2 varchar(100)

SELECT *
FROM Table1 t1
INNER JOIN dbo.Table2 t2 ON t1.Col1 = t2.Col1
WHERE t1.Col2 = ISNULL(@Col2,t1.Col2)
--I want to write below condition the same way i have written the above condition
AND t1.Col3 IN (select * from dbo.SplitMe(@list))

有没有办法编写选择 Col3 的条件,就像选择 Col2 一样?

最佳答案

如果想法是在 @list 为 null 时不按 Col3 进行过滤,那么您可以以同样的方式执行

Declare @list varchar(100), @Col2 varchar(100)

SELECT *
FROM Table1 t1
INNER JOIN dbo.Table2 t2
on t1.Col1 = t2.Col1

where t1.Col2 = ISNULL(@Col2,t1.Col2)
AND (@list IS NULL OR t1.Col3 IN (select * from dbo.SplitMe(@list)))

但这不是一个好主意,除非表非常小。出于计划缓存的原因,通常最好将所有这些排列分解为它们自己的 SQL 语句,而不是尝试编写一个适合所有查询的单一尺寸,或者(如果排列数量太大)考虑使用动态 SQL(请参阅 Dynamic Search Conditions in T-SQL )

请注意,这不能保证 Split 函数不会被调用。不保证条款的评估顺序。但这确实意味着如果它被调用,它不会对查询结果产生任何影响。 (编辑当然假设在 NULL 时调用实际上不会导致某种错误,参见 Remus 的评论)

关于SQL Server 2005 : Select statement in ISNULL condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com