T-SQL Case表达式中的求值变量

T-SQL Case表达式中的求值变量,sql,sql-server,tsql,case,Sql,Sql Server,Tsql,Case,我得到一份工作 所有“=”的“=”附近的语法不正确 在下列情况下: DECLARE @TipoRegisto AS VARCHAR(1) DECLARE @idTipoRegisto AS INT SELECT CASE @TipoRegisto WHEN @idTipoRegisto = 0 THEN 'R' WHEN @idTipoRegisto = 1 THEN 'I'

我得到一份工作

所有“=”的“=”附近的语法不正确

在下列情况下:

DECLARE @TipoRegisto    AS VARCHAR(1)
DECLARE @idTipoRegisto  AS INT

SELECT 
       CASE @TipoRegisto            
              WHEN @idTipoRegisto = 0 THEN 'R' 
              WHEN @idTipoRegisto = 1 THEN 'I' 
              WHEN @idTipoRegisto = 2 THEN 'C' 
              ELSE  '' 
       END

有人能解释一下原因吗?

如果你真的很接近,Case会返回你想要设置变量的值

DECLARE @TipoRegisto    AS VARCHAR(1)
DECLARE @idTipoRegisto  AS INT

SELECT @TipoRegisto = CASE
                           WHEN @idTipoRegisto = 0 THEN 'R' 
                           WHEN @idTipoRegisto = 1 THEN 'I' 
                           WHEN @idTipoRegisto = 2 THEN 'C' 
                           ELSE  '' 
                      END
试试这个:

DECLARE @TipoRegisto    AS VARCHAR(1)
DECLARE @idTipoRegisto  AS INT

SET @TipoRegisto = (SELECT 
                           CASE @idTipoRegisto            
                                WHEN 0 THEN 'R' 
                                WHEN 1 THEN 'I' 
                                WHEN 2 THEN 'C' 
                           ELSE  '' 
                     END)

那个SELECT真的有必要吗?和Cheruvian的答案相比,它不会恶化查询的性能吗?这是不必要的…但如果您从表中检查列值,那个时候您需要它。另一个,您正在检查一个变量,所以您可以使用这个简单的case语句。(
CASE WHEN THEN WHEN END
而不是
CASE WHEN=THEN WHEN=THEN END