2011-11-19 112 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.