2013-05-24 2 views
1

내 변수 중 하나가 널인 경우 다른 열을 반환하는 저장 프로 시저에서 테이블을 선택합니다. 입력 사항 중 하나를 기반으로 테이블을 다르게 선언하려면 어떻게합니까? 아래 코드는 내가하려고하는 것을 전달하지만이 방법을 시도하면 테이블을 두 번 선언한다는 오류가 발생합니다.변수가 null 인 경우 테이블 구조를 변경하는 방법

IF @Input IS NOT NULL BEGIN 
DECLARE @tbl AS TABLE (
    Var1 FLOAT, 
    Var2 DATETIME, 
    VAR3 INt, 
    ... 
) 
END 
ELSE 
DECLARE @tbl AS TABLE(
    Var1 INT, 
    Var2 FLOAT, 
    Var3 DATETIME, 
    ... 
) 
+0

이것은 불가능합니다. 변수 선언은'DECLARE' 시점이 아닌 배치의 시작 부분으로 올라간 것처럼 두 번 선언 할 수 있습니다. 아마도 가장 쉬운 해결책은 두 개의 다른 테이블 변수를 선언하는 것입니다. –

+0

그게 내가 생각했던거야, 2 테이블, 그럼 거기에 올바른 테이블을 가리 키도록 IF 문을 변수를 사용하십시오. –

+0

SP에 의해 리턴 된 것으로부터 테이블을 생성하기 위해'select into'를 사용하는 것은 어떻습니까? –

답변

2

두 개의 다른 테이블 변수 ... @stage, @ stage1을 사용하십시오.

2

나는 이것이 내가하는 일을 생각할 수있는 유일한 방법이며, 우호적이지 않다. 당신은 같은 변수 테이블을 선언하는 범위를 이동해야합니다

DECLARE @Input VARCHAR(5),@TableFields VARCHAR(1000) 
SET @Input = NULL 
BEGIN 
IF @Input IS NOT NULL 
SET @TableFields = 'Var1 FLOAT,Var2 DATETIME,VAR3 INt' 
ELSE  
SET @TableFields = 'Var1 INT,Var2 FLOAT,Var3 DATETIME' 
EXEC ('DECLARE @tbl AS TABLE ('[email protected]+') 
     INSERT INTO @tbl VALUES (''1'','''','''') 
     SELECT * FROM @tbl 

    ') 
END 

쉽게이 IMO, 당신의 IF 논리에 따라 각 2 개 테이블 변수와 포인트를 사용 할 수 있습니다.

+0

굉장한 트릭 ... +1 –

관련 문제