sourcetip

ifelse 문 안에서 여러 값을 설정하는 방법은 무엇입니까?

fileupload 2023. 8. 16. 22:33
반응형

ifelse 문 안에서 여러 값을 설정하는 방법은 무엇입니까?

아래 ifelse 문에서 두 개 이상의 값을 설정하려고 합니다. 하나의 값을 설정하면 작동하지만 두 개의 값을 설정하면 작동하지 않습니다.

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'

오류 메시지: "Msg 156, 레벨 15, 상태 1, 라인 9
키워드 'ELSE' 근처의 구문이 잘못되었습니다."

그러나 여러 개의 SET 변수를 차례로 가질 수 있으며, 이 코드는 다음과 같이 작동합니다.

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

어떻게 하면 제대로 할 수 있을까요?

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

사용하다BEGIN그리고.END사용하는 것과 마찬가지로 다중 문 코드 블록을 표시합니다.{그리고.}다른 언어로, 다중을 배치할 수 있습니다.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

또는 사용SELECT변수에 값을 할당하여 단일 문에 둘 다 할당할 수 있으므로 사용할 필요가 없습니다.BEGIN그리고.END.

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

다음에 여러 개의 문이 있는 경우IF사용해야 합니다.begin그리고.end(예를 들어, c#의 표창과 유사함).

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

첫 번째 평가판은 다음과 같이 분할되므로 이러한 동작은 타당합니다.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'

SET @test2 = 'test2' 

ELSE
   SET @test1 = 'testelse'

그리고.ELSEIF 문에 속하지 않으므로 실패합니다.

이렇게 하는 것을 고려해 보십시오.

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

질문의 두 번째 식을 사용하면 항상 @test2 = 'testelse'가 실행됩니다. ELS가 첫 번째 식을 사용한 직후에 종료되기 때문입니다.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
-- IF is done evaluating here
SET @test2 = 'testelse' 

IF 내에 여러 개의 식이 있는 경우 언제든지 BEGIN / END를 사용하여 식을 그룹화할 수 있습니다.

그러나 귀하의 경우 가장 간단한 방법은 다음과 같습니다.

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

언급URL : https://stackoverflow.com/questions/36279671/how-to-set-multiple-values-inside-an-if-else-statement

반응형