ISNULL在SQL Server中具有多个Integer值

时间:2018-04-12 02:38:47

标签: sql-server-2014 isnull

我的要求是将带有一些整数的输入参数传递给DB以获取数据。但是在前端,我正在检查我们是否没有选择任何输入数据(报告类型的应用程序),NULL应该传递其他所有数据或所选数据应该通过。

WHERE
    a.DateTime BETWEEN '2018-04-12 00:00:00' AND '2018-04-12 23:59:59' 
    AND ISNULL('0000441183344450,0000447769267501,0000447789917187',CallNumber) = CallNUmber
    AND ISNULL(CAST('1,2,3' AS INT), ID) = ID

在上面的查询中ISNULL(CAST('1,2,3' AS INT), ID) = ID导致错误:

  

将varchar值'1,2,3'转换为数据类型int

时转换失败

我知道它非常通用的错误,但我的要求是如果用户没有在输入中选择任何值,则传递选定的Integer值或所有值。

在数据库中,ID具有int数据类型,如果与引号值(以及ISNULL('121','122',AgentSkillTargetID)=AgentSkillTargetID一起使用)我收到错误

  

isnull函数需要2个参数

在同一查询中

ISNULL('0000441183344450,0000447769267501,0000447789917187',CallNumber) = CallNUmber

正在运行,因为CallNumber的数据类型为varchar

1 个答案:

答案 0 :(得分:1)

isnull函数是一个t-sql函数,只能接受两个参数。要从较大的参数列表返回第一个非空值,请改用ansi-complient coalesce函数。有些人可能会声称你永远不应该使用isnull,因为它不是ansi complient。就个人而言,我认为这不是一个足够好的理由。我认为你应该使用最好的工具。

有关详情,请参阅coalesce文档页面的Comparing COALESCE and ISNULL部分。