2011-11-19 137 views
1

我不得不微調一堆存儲過程,並得到一個內部負載爲IF ELSE blocks的子句,它們具有包含事務的插入語句。因此,我模仿他們使用情況發現,我得到的語法錯誤,請嘗試以下語句(的正在做什麼一個簡單的例子),但相信你會得到的想法TSQL中CASE子句內部的SELECT語句拋出錯誤

DECLARE @rowcount int 
SELECT @rowcount = -1 
CASE WHEN @rowcount = -1 THEN 
    select 'I WON THE RACE' 
WHEN '2' 
    SELECT 'WHAT A LOSER' 
END 

每個案件有一個以上的語句,所以我只是把它們裝進了(),但沒有用。請修正我在TSQL中關於Case的知識。 (使用SQL Server 2005是否有幫助)

回答

8

您希望您的CASE聲明是這樣的:

DECLARE @rowcount int 
SELECT @rowcount = -1; 
SELECT CASE @rowcount 
      WHEN -1 THEN 'I WON THE RACE' 
      WHEN 2 THEN 'I did not win' 
     END AS columnName 

CASE進了SELECT聲明內。然後你只要看看你的價值@rowCount,並採取適當的行動。您可能需要閱讀更多有關CASE聲明

一個CASE語句的第二種形式是這樣的:

SELECT CASE 
    WHEN @rowcount IS NULL THEN 'Null case here' 
    WHEN @rowcount = -1 THEN 'I WON THE RACE' 
    WHEN @rowcount = 2 THEN 'I did not win' 
END AS columnName 

如果你想使用一個CASE與INSERT:

DECLARE @rowcount int 
SELECT @rowcount = -1; 

INSERT INTO myTable(column1, column2, column3) 
SELECT CASE @rowcount 
      WHEN -1 THEN 'I WON THE RACE' 
      WHEN 2 THEN 'I did not win' 
     END AS column1 
    , t.column2 
    , CASE 
     WHEN t.someColumn < someValue THEN 'thirdColumnValue' 
     ELSE 'someColumn is greater than specified value' 
    END AS column3 
FROM secondTable AS t 
+0

如果不夠清楚,我很抱歉。這僅僅是一個例子,**我得到插入語句代替那些選擇**它沒有區別嗎? – Deeptechtons

+0

@Deeptechtons我已經更新了我的答案,以包含使用'CASE'語句的'INSERT'的示例。 –

1

從你的評論中,你可能想要使用一個IF語句,如果你試圖做2個不同的插入/多個語句?

IF @rowcount = -1 
BEGIN 
    <stmt1> 
    <stmt2> 
END 

IF @rowcount = 2 
BEGIN 
    <stmt3> 
    <stmt4> 
END 
+0

確切地說,在存儲過程中還有一些if else,我想用Case替換它們。這就是我去這裏的原因。**所以沒有任何替換?** – Deeptechtons

+0

不,如果目標是運行這樣的整個陳述,那就沒有替代。 CASE在語句中用於分支邏輯,不執行新語句 –

-1

只有 你也可以使用設置一個建議set @rowcount = -1;

DECLARE @rowcount int 
set @rowcount = -1; 
select CASE @rowcount WHEN -1 THEN 
    'I WON THE RACE' 
WHEN '2' then 
    'WHAT A LOSER' 
END Status 
+1

與我的問題無關 – Deeptechtons

1

你混淆了T-SQL的SELECT...CASE用VisualBasic中的SELECT CASE.

T-SQL:

的情況下表達式用於評估幾個條件並返回 每個條件的單個值。例如,它允許根據列的值顯示 替代值。

VB:

Select...Case運行語句的幾組,這取決於 表達式的值中的一個。

如果在T-SQL中有等價物,但沒有,那將是很好的。 Here's what's available in T-SQL.