我有一个存储过程,我想根据存储在局部变量中的结果执行不同的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'.
答案 0 :(得分:4)
使用IF...ELSE
语法进行控制流程:
DECLARE @myVar int;
SET @myVar = 1;
IF @myVar = 0
SELECT 0;
ELSE
SELECT GETDATE();
答案 1 :(得分:2)
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