2015-02-02 2 views
0

쿼리에서 이름을 가진 모든 테이블의 열을 쿼리하려고합니다. 이 같은쿼리에서 반환 한 쿼리 테이블

뭔가 :이 비록 구문 오류를 제공

SELECT [COLUMN_NAME] FROM (SELECT FKTABLE_NAME FROM @temp_table) 

,이 작업을 수행하는 방법은 무엇입니까?

+0

모든 잠재적 테이블에서 데이터 형식이 동일합니까? 그렇지 않은 경우이 작업을 수행하는 데 어려움을 겪을 수 있습니다. –

+0

아니요 .. 실제로는 하나의 열만 선택해야하지만 공통적으로 모든 것이 공유됩니다. 내 원래 질문을 업데이트했습니다 – CSCoder

+0

죄송합니다. 제 대답이 옳지 않았습니다. 나는 모양을 가지고 다시 시도 할 것이다! –

답변

0

모든 가능한 테이블의 데이터가 동일한 형식 (즉, 동일한 순서의 동일한 데이터 형식)이라고 가정하면이 방법을 사용할 수 있습니다 (아마도 세계에서 가장 효율적인 솔루션은 아니지만 솔루션) :

create table #FK_Names(tab varchar(50)) 
    insert into #FK_Names values ('#tab1') 
    insert into #FK_Names values ('#tab2') 

    create table #tab1(id int) 
    create table #tab2(id int) 

    insert into #tab1 values (1) 
    insert into #tab1 values (2) 
    insert into #tab1 values (3) 
    insert into #tab2 values (4) 
    insert into #tab2 values (5) 
    insert into #tab2 values (6) 
    /*You want the part following this comment */ 

    create table #temp (id int) 
    declare tabCursor insensitive cursor for select * from #FK_Names 
    declare @tabName varchar(100) 
    open tabCursor 
    fetch from tabCursor into @tabName 
    while @@fetch_status = 0 
    begin 
     declare @cmd nvarchar(max) 
      set @cmd ='insert into #temp select * from ' + @tabName 
      EXECUTE sp_executesql @cmd 
     fetch next from tabCursor into @tabName 
    end 
    close tabCursor 
    deallocate tabCursor 

    select * from #temp 
+0

이 코드를 실행하려고하면 오류가 발생합니다. '커서'근처의 잘못된 구문을 말합니다. – CSCoder

+0

지금 수정 된 버전 - 나쁘다. 커서 이름에는 @이 필요하지 않습니다. 주석 위에있는 대답 부분은 테스트 데이터를 작성하므로 테스트 해 볼 수 있습니다. –

+0

여전히 오류가 발생합니다.'select *에 대한 tabCursor insensitive 커서 선언은 * FK_NAMES'에서 'select tabKursor sensitive cursor for @ temp_table'을 선언해야합니다. 맞습니까? 또한 #temp는 어떻게 채워 집니까? – CSCoder

관련 문제