我的要求是将带有一些整数的输入参数传递给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
。
答案 0 :(得分:1)
isnull
函数是一个t-sql函数,只能接受两个参数。要从较大的参数列表返回第一个非空值,请改用ansi-complient coalesce
函数。有些人可能会声称你永远不应该使用isnull
,因为它不是ansi complient。就个人而言,我认为这不是一个足够好的理由。我认为你应该使用最好的工具。
有关详情,请参阅coalesce
文档页面的Comparing COALESCE
and ISNULL
部分。