我在MYSQL中使用了始终正确的语句,例如,在where子句的case语句中使用了1 = 1语句,语法如下:
select * from tablename where
(case when tablefield is not null then
then tablefield = 'value'
else 1 = 1 end)我想知道如何在where子句中的sqlserver/tsql语句中使用1 = 1 (总是true语句)。
发布于 2015-03-08 14:54:22
对不起,我刚才混淆了查询,我打算在参数变量为null而不是tablefield时请求一个条件--在这种情况下,查询可能如下所示:
选择*从tablename where (当parameterfield_or_variable不是null时,那么tablefield = 'value‘,否则1=1结束)
或者当使用参数字段作为值时(当parameterfield_or_variable为非空时,tablefield = parameter_field_or_variable or 1=1 end)
问题的答案是:KHeaney是对的。
但是,如mysql中所述,tsql/sqlserver中的查询如下所示:
选择*从tablename,其中tablefield =@参数字段-在比较输入参数字段和tablefield或@参数为空的情况下
因此,当@参数字段为null时,它将显示所有结果,否则它将仅限于输入值。
谢谢
发布于 2015-03-04 22:28:50
您将不使用case,您只需要编写一个多条件语句。在你的例子中它看起来就像
Where (tablefield = 'value'
OR tablefield is null)发布于 2015-03-04 23:00:11
如果要使用TSQL CASE函数,可以执行以下操作:
select * from tablename where 1 =
(case when tablefield is not null then
(case when tablefield = 'value' then 1 else 0 end)
else 1 end) 可简化为:
select * from tablename where 1 =
(case when tablefield is null then 1 when tablefield = 'value' then 1
else 0 end)您可以省略“Other0”部分,因为当没有找到匹配时,将返回NULL (这将不等于1)。即:
select * from tablename where 1 =
(case when tablefield is not null then
(case when tablefield = 'value' then 1 end)
else 1 end)
select * from tablename where 1 =
(case when tablefield is null then 1 when tablefield = 'value' then 1 end)https://stackoverflow.com/questions/28865989
复制相似问题