2010-12-04 4 views
2

입력 변수에 따라 이름이 달라지는 테이블을 만들어야하는 저장 프로 시저를 만듭니다. 일시적인 결과를 위해 나는 테이블 변수를 선언 한 :테이블 이름을 @tableB *에서 @tableA로 바꾸려면 어떻게해야합니까?

내가 임시 결과에 저장해야 할 결국 다른 변수

declare @tableB varchar = ... 

선언 있도록 출력 테이블 이름은 사용자의 입력에 따라

declare @tableA TABLE(
column1, 
column2, 
.. 
) 

테이블 이름은 @ 테이블 B이므로 저장 프로 시저에서 다음 문을 쓰려고했습니다.

declare @sql varchar(max) 
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA' 
exec(@sql) 

올바르지 않습니다. 누구든지 테이블 변수에서 값을 변수에 삽입하는 방법을 알고 있습니까?

+0

여기에 뭔가가 있습니까? @ 테이블 B는 정상적인 테이블입니까? 그렇다면 왜 간단한 동적 삽입 쿼리를 사용할 수 없습니까? –

답변

1

여기서 테이블 변수를 사용할 수 없으므로 임시 테이블을 사용하십시오. 자세한 내용은 표 #tableA (...

만들기 : link text

하는 테이블 #A 생성 ( C1의 INT, C2 INT ) #A 값으로

인서트 (1 2) #A 값으로

인서트 (3,4)

선언 @Sql VARCHAR의 (최대)

@tableB sysname = '## tableB';

@sql = 'SELECT * INTO'+ @ tableB + 'FROM #A';

인쇄 @sql;

exec (@sql);

go

select * from ## tableB;

0

시도하는, @tableB이 이미 존재하는 첫번째 추측은 것입니다 가정 :

SET @sql = 
    'INSERT 
    (
     col1, 
     col2 
    ) 
    INTO ' + @tableB + ' 
    SELECT 
    (
     col1, 
     col2 
    ) 
    FROM 
     @tableA' 

이 아니다 체크 구문, 그래서 조심!

@tableB가 없으면 사용자 이름이 왜 필요합니까?

관련 문제