以下查询返回上述错误。列WNT.USER.PriviligeLevel_SV包含值1,2,3或不同的错误。如果值为1,则需要返回“管理员”,如果值为2,则返回“客户”,如果值为3,则返回“用户”。否则,此列应包含逐字错误消息。我试图使用ELSE CAST([Wnt.User.PrivilegeLevel_SV] AS nvarchar)
和WHEN [Wnt.User.PrivilegeLevel_SV] NOT LIKE '%[^0-9]%'
,但都没有工作。请指教。CASE语句中的“将nvarchar值转换为数据类型int时转换失败”
SELECT [Wnt.User.Host] AS 'Machine Name',
"Account Privilege Level" =
CASE
When [Wnt.User.PrivilegeLevel_SV] = 1 Then 'Administrator'
When [Wnt.User.PrivilegeLevel_SV] = 2 Then 'User'
When [Wnt.User.PrivilegeLevel_SV] = 3 Then 'Guest'
Else [Wnt.User.PrivilegeLevel_SV]
End
FROM [Prod].[AdHoc].[TestBuffer]
SQL版本是2008年和WNT.USER.PriviligeLevel_SV列被定义为nvarchar的(最大)
不,问题不是由''求值'的值,而是''从case case语句返回的值。 – DrCopyPaste 2014-09-12 13:06:41
case语句将搜索整个表中的匹配项,因此当发生int和varchar比较时会引发错误。由返回的值没有问题,因为这些都是字符串类型。 – 2014-09-12 13:09:49
没有其他的SQL Server比较好,只要它们是可解析的就可以比较varchar和ints。考虑[this](http://sqlfiddle.com/#!6/d41d8/21535)和[that](http://sqlfiddle.com/#!6/d41d8)。 (由于返回类型不同而失败,但成功) – DrCopyPaste 2014-09-12 13:13:12