SQL中CASE子句中的SELECT语句抛出错误

时间:2011-11-19 05:19:18

标签: sql sql-server sql-server-2005 tsql case

我必须对一堆存储过程进行微调,并在其中加载一个IF ELSE blocks的存储过程,它们具有带事务的插入语句。因此,我使用case建模他们发现我得到语法错误尝试下面的语句(一个简单的例子,正在做什么)但确定你会得到这个想法

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

每个案例都有多个语句,所以我只是将它们包含在()内,但是要进入noavail。请更正我对TSQL案例的了解。 (如果有帮助,请使用SQl Server 2005)

4 个答案:

答案 0 :(得分: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

CASESELECT语句中。然后,您只需查看@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

如果您想使用带INSERT的CASE:

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

答案 1 :(得分:1)

从您的评论中,如果您尝试执行2个不同的插入/多个语句,您可能会想要使用IF语句?

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

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

答案 2 :(得分:1)

您将T-SQL的SELECT...CASE与VisualBasic的SELECT CASE.

混淆

T-SQL:

  

CASE表达式用于评估几个条件并返回   每个条件的单个值。例如,它允许   根据列的值显示替代值。

VB:

  

Select...Case运行几组语句中的一组,具体取决于   表达式的价值。

如果在T-SQL中有一个等价物,那就太好了,但是没有。 Here's what's available in T-SQL.

答案 3 :(得分:-1)

仅限建议 你也可以使用set 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