如何在where子句中动态添加列

时间:2010-12-06 13:51:25

标签: sql-server

我想根据条件在where子句中包含列。 例如 选择*来自emp 其中id = 7, 如果(代码不为空)则代码= 8;

如何在sql server中执行此操作

7 个答案:

答案 0 :(得分:2)

如果我理解你的错误,你可以使用COALESCE。

COALESCE()

  

返回第一个非空表达式   在其论点中。

SQL声明

SELECT  *
FROM    emp
WHERE   id=7
        AND code = COALESCE(@code, code)

答案 1 :(得分:1)

如果code是列而不是变量,则问题中的查询将被重写如下。

SELECT * 
FROM emp 
WHERE id=7 AND (code IS NULL OR code=8)

答案 2 :(得分:0)

您可能必须以字符串形式动态创建查询,然后使用Execute方法实际执行它。这种方法有一些潜在的优化问题,但通常都会这样做。你可能会去谷歌T-SQL Dynamic Query,或类似的东西。

答案 3 :(得分:0)

这是一个例子:

declare @SQL varchar(500)
declare @var1 int
set int = 1
set @SQL = 'Select * from ABC Where 1 = 1'

if(@var1 = 1)
set @SQL + @SQL ' And column1 = ' @var1

exec(@SQL)

答案 4 :(得分:0)

在@ var1中的Null值的情况下也使用它。

从ABC中选择*,其中Column1 = isNull(@ var1,Column1)

答案 5 :(得分:0)

您可以使用COALESCE功能。

答案 6 :(得分:0)

好吧,

我不知道我是否理解了您的问题,但我想您希望在结果中包含代码列的值。

如果我是对的,可以在select部分而不是where子句中完成。一世。即

Select ..., case when code is not null then 8 else code end as code from emp where id = 7

另一种解释是您希望过滤代码<>的行。 8,那将是

Select * from emp where id = 7 and (code is null OR code = 8)