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'