2010-08-04 14 views
8

Ich würde gerne wissen, wie ich lokale Variablen in CASE Anweisungen in SQL verwenden kann?SQL CASE und lokale Variablen

Dieses Skript gibt mir eine Fehlermeldung:

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

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

Ich benutze MS SQL 2008

+0

Welche Datenbank benutzen Sie? – Oded

+0

MS SQL 2008 MS SQL 2008 – GibboK

+0

Haben sie den "Server" Teil des Namens fallen lassen? ;-P –

Antwort

19

Zwei Möglichkeiten CASE in diesem Szenario mit MSSQL zu verwenden

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

In SQL Server ich es so schreiben würde:

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

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

Die WHEN Klausel nicht haben @Test = 10, wie die @Test Variable in der CASE Klausel angegeben ist.

Siehe Dokumentation CASE für SQL Server.

+0

Das funktioniert nicht in meiner SQL 2005-Datenbank. (falsche Syntax neben dem Schlüsselwort 'Case'). (Ich hatte die gleiche Lösung, aber es hat nicht funktioniert). – Tobiasopdenbrouw

+0

gibt es Fehler – GibboK

+0

Die Syntax hier ist falsch. Sie können eine case-Anweisung nicht als if-Anweisung verwenden. –

0

CASE @Test WENN DANN 10

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

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

für SQL Server 2005

+0

Die Antwort von anishmarokey ist ein bisschen sauberer, da es Ihre Variable @result beibehält. – Tobiasopdenbrouw

2

versuchen, dieses:

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

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

Print @Result;