【发布时间】:2016-09-29 11:37:24
【问题描述】:
我做了这样的事情,效果很好:
select nameOfCols
from
FACost
inner join FAT as D on d.nid=a.atypeid
and
d.nid in (select item from SplitString('1,2,3,',','))
但是当我使用 case 来处理用户动态输入 '' 而不是 '1,2,3,' 的情况时。然后它在我的情况下给出错误
declare @selectedAssetTypeID varchar(50)='1,2,3,'
select nameOfCols
from
FACost
inner join FAT as D on d.nid=a.atypeid
and
case when @selectedAssetTypeID<>'' then d.nid in (select item from SplitString( @selectedAssetTypeID,',')) else d.nid=1 end //error causing lines
错误是:
Msg 156, Level 15, State 1, Line 33
Incorrect syntax near the keyword 'in'.
Msg 156, Level 15, State 1, Line 33
Incorrect syntax near the keyword 'else'.
【问题讨论】:
-
A
CASE表达式 必须返回 SQL 数据类型的标量值(每行)。它不能返回评估谓词的结果,因为那将是一个布尔值 - 而 SQL Server 没有布尔数据类型。
标签: sql sql-server select stored-procedures