SQL Server CASE转换失败

Mar*_*k S 1 sql t-sql sql-server case sql-server-2012

我有一些麻烦了CASE的说法,从转换的值时,我得到一个错误VARCHARINT.我知道这是由于优先约束,并修复我需要CONVERT/CAST我的一个值,我很难找出要转换的内容.

这个原始的帖子把我推向了正确的方向,只是敲打着我的脑袋想出来.

UPDATE  Table1
SET     IntField = ( CASE WHEN ( VARCHARField = 0
                             OR VARCHARField = 1
                             OR VARCHARField = 2
                             OR VARCHARField = 3
                           ) THEN 0
                      WHEN ( VARCHARField = 4
                             OR VARCHARField = 5
                             OR VARCHARField = 6
                             OR VARCHARField = 7
                           ) THEN 1
                      WHEN ( VARCHARField = 8
                             OR VARCHARField = 9
                           ) THEN 2
                      WHEN ( VARCHARField = 'N' ) THEN 3
                      ELSE 0
                 END )
Run Code Online (Sandbox Code Playgroud)

错误:

消息245,级别16,状态1,行1
转换将varchar值'N'转换为数据类型int时失败.

任何帮助将不胜感激.

Gor*_*off 7

这与此无关case.这是比较.您需要将字符字段与整数进行比较.也许你的意思是:

CASE 
    WHEN VARCHARField in ('0', '1', '2', '3') THEN 0
    WHEN VARCHARField in ('4', '5', '6', '7') THEN 1
    WHEN VARCHARField in ('8', '9') THEN 2
    WHEN VARCHARField = 'N' THEN 3
    ELSE 0
END
Run Code Online (Sandbox Code Playgroud)

虽然,从错误消息的实质,我猜这VARCHARField实际上存储为数值.