是否可以使用case语句更改运行哪个SELECT语句

时间:2013-08-15 18:54:56

标签: sql sql-server tsql

我有一个存储过程,我想根据存储在局部变量中的结果执行不同的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'.

5 个答案:

答案 0 :(得分:4)

使用IF...ELSE语法进行控制流程:

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

答案 1 :(得分:2)

兄弟,对于CASE函数,它只能返回单个值,如字符串,以便根据某些条件执行不同的查询,否则将是选项。

DECLARE @myVar INT
SET @myVar = 1
IF @myVar = 0
SELECT '0 0'
ELSE
SELECT GETDATE()

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我想它应该是

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

如果你只是学习一些语法元素,你也应该立即开始用分号结束每个语句。
When should I use semicolons in SQL Server?

答案 4 :(得分:0)

使用以下格式:

IF (@myVar = 0)
BEGIN
  SELECT <something>
END
ELSE
BEGIN
  SELECT <something else>
END