Sql server 案例陈述中的问题

Sql server 案例陈述中的问题,sql-server,Sql Server,我的项目中有以下case statemet tbl_ExceptionStatus.ExceptionStatusValue IN (case when @excstat='Awaiting ERR Approval' then ('1') else @excstat END) 这很好,但我必须把它改成这个 tbl_ExceptionStatus.ExceptionStatusValue IN (case when @excstat='Awaiting ERR Approval' then (

我的项目中有以下
case statemet

tbl_ExceptionStatus.ExceptionStatusValue IN (case when @excstat='Awaiting ERR Approval' then ('1') else @excstat END)
这很好,但我必须把它改成这个

tbl_ExceptionStatus.ExceptionStatusValue IN (case when @excstat='Awaiting ERR Approval' then ('1','2','3') else @excstat END)
这是一个错误 将varchar值“1,2,3”转换为数据类型smallint时,转换失败


我如何才能更改我的
案例状态memt
以终止错误?

您有一个表单的语句

A IN (CASE WHEN @x='someString' THEN ('1', '2', '3') ELSE @x END)
无效(不能在case语句中返回列表)

您可以按如下方式重写它:

   (@x = 'someString' AND A IN ('1', '2', '3'))
OR (@x <> 'someString' AND A = @x)

Case语句遵循数据类型优先级,无论then和else子句中的数据类型最高,它都会尝试将它们转换为该数据类型。请参见下面的示例

declare @a int
set @a=1

select case when @a=1 then 'a' else 2 end
上述方法不适用于

将varchar值“a”转换为数据类型int时,转换失败

就你而言

then ( '1,2,3' )--varchar
 else @excstat ----int
查询的书面形式不会引发错误

('1','2','3')
但这是

'1,2,3' 

我将如何在where语句中使用它?我不理解,我将如何在where语句中使用它understand@Ashu:你到底不明白什么?您只需将
A
替换为
tbl\u ExceptionStatus.ExceptionStatusValue
,等等。
'1,2,3'