1

我有一个存储过程,我想select根据存储在局部变量中的结果执行不同的操作。我的用例很简单,在存储过程中先前查询的某些结果中,我知道最后一个查询不会返回任何内容。但是最后一个查询很昂贵,并且需要一段时间,所以我想把它短路并且什么都不返回。

这是我想要实现的流程的模型,但我从 SQL Management Studio 收到语法错误

DECLARE @myVar int;
SET @myVar = 1;
CASE WHEN @myVar = 0
THEN
    SELECT 0 0
ELSE
    SELECT getDate()
END

错误是:Msg 156, Level 15, State 1, Line 3 Incorrect syntax near the keyword 'CASE'. Msg 102, Level 15, State 1, Line 8 Incorrect syntax near 'END'.

4

5 回答 5

3

使用IF...ELSE控制流的语法:

DECLARE @myVar int;
SET @myVar = 1;
IF @myVar = 0
    SELECT 0;
ELSE
    SELECT GETDATE();
于 2013-08-15T18:57:31.053 回答
2

兄弟,对于 CASE 函数,它只能返回字符串等单个值,以便根据特定条件执行不同的查询,if else 将是选项。

DECLARE @myVar INT
SET @myVar = 1
IF @myVar = 0
SELECT '0 0'
ELSE
SELECT GETDATE()
于 2013-08-16T02:47:11.707 回答
1

我想应该是

DECLARE @myVar int;
SET @myVar = 1;
IF @myVar = 0
    SELECT 0;
ELSE
    SELECT getDate();

如果你只是学习一些语法元素,你也应该马上开始用分号结束每条语句。
什么时候应该在 SQL Server 中使用分号?

于 2013-08-15T18:58:36.593 回答
1

如果您想要不同的选择语句,请使用 IF not CASE。IF 是一个控制流项,case 仅用于从 select 中选择备选方案。

于 2013-08-15T18:57:17.393 回答
0

使用这种格式:

IF (@myVar = 0)
BEGIN
  SELECT <something>
END
ELSE
BEGIN
  SELECT <something else>
END
于 2013-08-15T18:59:06.097 回答