SQL 服务器中具有多个整数值的 ISNULL

ISNULL with multiple Integer values in SQL Server

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

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 导致错误:

Conversion failed when converting the varchar value '1,2,3' to data type int

我知道这是非常普遍的错误,但我的要求是传递 selected 整数值或所有值,如果用户没有 select 输入中的任何值。

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

The isnull function requires 2 argument(s)

在同一个查询中

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

有效,因为 CallNumber 的数据类型是 varchar

isnull function is a t-sql function that can only accept two parameters. For returning the first non-null value from a larger list of parameters, use the ansi-complient coalesce 函数代替。有些人可能会声称您永远不应该使用 isnull,因为它不符合 ansi。就个人而言,我认为这不是一个足够好的理由。我认为您应该使用可用的最佳工具。

有关详细信息,请阅读 coalesce 文档页面的 Comparing COALESCE and ISNULL 部分。