2010-08-04 109 views
8

我想知道如何在SQL中使用CASE语句中的局部变量?SQL CASE和局部变量

这个脚本给我一个错误:

DECLARE @Test int; 
    DECLARE @Result char(10); 
    SET @Test = 10; 

    CASE @Test 
    WHEN @Test = 10 
    THEN SET @Result='OK test' 
    END 
    Print @Result; 

我使用MS SQL 2008

+0

你使用什么数据库? – Oded 2010-08-04 07:20:13

+0

MS SQL 2008 MS SQL 2008 – GibboK 2010-08-04 07:24:38

+0

他们是否放弃了名称的“服务器”部分? ;-P – 2010-08-04 07:45:50

回答

19

在这种情况下使用CASE与MSSQL

DECLARE 
    @test int, 
    @result char(10) 

SET @test = 10 

SET @result = CASE @test 
    WHEN 10 THEN 
     'OK test' 
    ELSE 
     'Test is not OK' 
END 

PRINT @result; 

SET @result = CASE 
    WHEN @test = 10 THEN 
     'OK test' 
    ELSE 
     'Test is not OK' 
END 

PRINT @result 
1

在SQL Server中我会写这样的:

DECLARE @Test int; 
DECLARE @Result char(10); 
SET @Test = 10; 

SET @Result = CASE @Test 
WHEN 10 
THEN 'OK test' 
END 
Print @Result; 

WHEN子句不具有@Test = 10,因为@Test变量在CASE子句中陈述。

请参阅CASE SQL Server的文档。

+0

这不适用于我的SQL 2005分贝。 (关键字'Case'附近的语法不正确)。 (我有同样的解决方案,但它没有工作)。 – Tobiasopdenbrouw 2010-08-04 07:25:17

+0

它给出错误 – GibboK 2010-08-04 07:26:09

+0

这里的语法是错误的。你不能像if语句那样使用case语句。 – 2010-08-04 07:26:53

0

CASE WHEN @Test 10 THEN

0
DECLARE @Test int; 
SET @Test = 10; 

SELECT 
CASE @Test 
WHEN 10 
THEN 'OK test' 
END 

对于SQL Server 2005

+0

anishmarokey的答案稍微清晰一些,因为它保留了@result变量。 – Tobiasopdenbrouw 2010-08-04 07:30:25

2

尝试这两种方式:

DECLARE @Test int; 
DECLARE @Result char(10); 
SET @Test = 10; 

select @Result= 
CASE @Test 
WHEN 10 THEN 'OK test' 
END 

Print @Result;