我必须对一堆存储过程进行微调,并在其中加载一个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)
答案 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
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
如果您想使用带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