如何在if else语句中设置多个值?

Mat*_*ias 28 sql t-sql sql-server

我正在尝试在下面的if else语句中设置多个值,如果我设置了一个值,它可以工作,但是如果我设置了两个值,它就不起作用:

DECLARE @test1 varchar(60);
DECLARE @test2 varchar(60);


IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
SET @test2 = 'test2' 
ELSE
SET @test1 = 'testelse'
SET @test2 = 'testelse'
Run Code Online (Sandbox Code Playgroud)

错误消息:"消息156,级别15,状态1,行9
关键字'ELSE'附近的语法不正确."

但是,似乎可以在else之后有多个SET变量; 这段代码有效:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
SET @test2 = 'testelse'
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能正确?

Abd*_*eed 48

如果在if条件中有多个语句,则必须使用该BEGIN ... END块来封装它们.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
 SET @test1 = 'test1'
 SET @test2 = 'test2' 
END
ELSE
BEGIN
 SET @test1 = 'testelse'
 SET @test2 = 'testelse'
END
Run Code Online (Sandbox Code Playgroud)


Mat*_*lie 6

使用BEGINEND标记多语句代码块,就像使用{}其他语言一样,您可以在其中放置多个SET语句...

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
    SET @test1 = 'test1'
    SET @test2 = 'test2'
END
ELSE
BEGIN
    SET @test1 = 'testelse'
    SET @test2 = 'testelse'
END
Run Code Online (Sandbox Code Playgroud)

或者,用于SELECT为变量赋值,允许在单个语句中分配两者,因此避免使用BEGINEND.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
    SELECT
        @test1 = 'test1',
        @test2 = 'test2' 
ELSE
    SELECT
        @test1 = 'testelse',
        @test2 = 'testelse'
Run Code Online (Sandbox Code Playgroud)