2013-05-28 4 views
4

SQL Server 2008에 대한 지식이 제한되어 있으며이를 수행하는 방법을 정확하게 찾을 수 없습니다. 내가 노력하고있어SQL 서버에서 열 이름으로 쿼리 출력을 사용하십시오.

INSERT INTO new_table (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') 
SELECT (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') FROM YourTableName 

: 내 생각에 열 이름의 목록으로 SELECT 절차의 결과를 사용하는 것입니다 (이 오래된 질문에서 생성 된 절차에 따라 How do you return the column names from a table?) 내가 좋아하는 일을하고 싶습니다 할 일은 적은 테이블을 가진 테이블의 데이터로 더 큰 테이블을 채우는 것입니다 (더 큰 테이블에 모든 테이블이 포함됨). 어쩌면 이것을 할 수있는 더 좋은 방법이있을 것입니다.

답변

3

이렇게하면 안됩니다.

DECLARE @NewTablecols AS NVARCHAR(MAX); 
DECLARE @query AS NVARCHAR(MAX); 


select @NewTablecols = STUFF((SELECT distinct ',' + 
         QUOTENAME(COLUMN_NAME) 
         FROM INFORMATION_SCHEMA.COLUMNS 
         WHERE TABLE_NAME = 'new_table' 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, ''); 



SET @query = 'INSERT INTO new_table ('+ @NewTablecols + ') 
     SELECT ' + @NewTablecols + ' FROM YourTableName'; 

execute(@query); 

new_table에있는 모든 열 목록, ALOS 그렇지 않으면 두 번째 테이블 YourTableName에서 발견되는 것으로 가정한다, 당신이 오류가 발생합니다 : 당신은이 작업을 수행하는 동적 SQL을 사용하려면이 같은 뭔가를 열 이름을 찾을 수 없다고 말합니다.

여기에 직접보기 :

+0

나는 테이블이 다른 데이터베이스에 기반으로 지정하는 것을 잊었다. 이 조건 때문에 고려해야 할 것이 있습니까? –

+0

@JorgePM'INSERT' 문은'DatabaseName.SchemaName.TableName' 형식의 정규화 된 테이블 이름을 사용하고 첫 번째 테이블의 열 이름을 가져 오기 위해 스크립트 집합'USE databasename;을 사용하십시오. –

+0

Brilliant! 그것은 완벽하게 작동했습니다, 감사합니다! –

관련 문제