쿼리에서 이름을 가진 모든 테이블의 열을 쿼리하려고합니다. 이 같은쿼리에서 반환 한 쿼리 테이블
뭔가 :이 비록 구문 오류를 제공
SELECT [COLUMN_NAME] FROM (SELECT FKTABLE_NAME FROM @temp_table)
,이 작업을 수행하는 방법은 무엇입니까?
쿼리에서 이름을 가진 모든 테이블의 열을 쿼리하려고합니다. 이 같은쿼리에서 반환 한 쿼리 테이블
뭔가 :이 비록 구문 오류를 제공
SELECT [COLUMN_NAME] FROM (SELECT FKTABLE_NAME FROM @temp_table)
,이 작업을 수행하는 방법은 무엇입니까?
모든 가능한 테이블의 데이터가 동일한 형식 (즉, 동일한 순서의 동일한 데이터 형식)이라고 가정하면이 방법을 사용할 수 있습니다 (아마도 세계에서 가장 효율적인 솔루션은 아니지만 솔루션) :
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
이 코드를 실행하려고하면 오류가 발생합니다. '커서'근처의 잘못된 구문을 말합니다. – CSCoder
지금 수정 된 버전 - 나쁘다. 커서 이름에는 @이 필요하지 않습니다. 주석 위에있는 대답 부분은 테스트 데이터를 작성하므로 테스트 해 볼 수 있습니다. –
여전히 오류가 발생합니다.'select *에 대한 tabCursor insensitive 커서 선언은 * FK_NAMES'에서 'select tabKursor sensitive cursor for @ temp_table'을 선언해야합니다. 맞습니까? 또한 #temp는 어떻게 채워 집니까? – CSCoder
모든 잠재적 테이블에서 데이터 형식이 동일합니까? 그렇지 않은 경우이 작업을 수행하는 데 어려움을 겪을 수 있습니다. –
아니요 .. 실제로는 하나의 열만 선택해야하지만 공통적으로 모든 것이 공유됩니다. 내 원래 질문을 업데이트했습니다 – CSCoder
죄송합니다. 제 대답이 옳지 않았습니다. 나는 모양을 가지고 다시 시도 할 것이다! –