2015-01-12 8 views
2

거기에 다른 데이터베이스에서 테이블의 열을 가져올 수있는 구문이 있습니까? 나는 select column_name from information_schema.columns where table_name = 'Database_Name.DBO.Table_Name'을 사용해 보았지만 작동하지 않습니다. 며칠 동안이 일을 도와주세요. 미리 감사드립니다.다른 데이터베이스에서 테이블의 모든 열을 가져옵니다

+0

Eric의 답변에서 제안하는 쿼리는 잘 작동합니다. 열 이름을 원하는 데이터베이스를 선택해야합니다. 그것은 나를 위해 일했습니다. –

+0

@PareshJ 예, 지금 제 문제입니다. 어떻게 테이블의 데이터베이스에 액세스 할 수 있습니까? –

+0

@PareshJ 위의 쿼리를 다른 데이터베이스를 사용하여 실행하고 있습니다. 예를 들어, 원하는 열은 다른 데이터베이스의 테이블에 있습니다. 거기에 대한 쿼리가 있습니까? 그것은이 쿼리와 같습니다. USE ADHOC은 table_name = 'Table_Name'및 database_name = 'CONSO_GP'인 information_schema.columns에서 column_name을 선택합니다. –

답변

3

끝났습니다. TABLE_NAME에는 테이블 이름 만 있습니다. 나머지 정보는 TABLE_CATALOG 및 TABLE_SCHEMA에 있습니다. 당신이 선택하고자하는 카탈로그와 INFORMATION_SCHEMA를받을 수 있습니다 다음 information_schema.columns 시스템 테이블에

select column_name from Database_Name.information_schema.columns 
where table_name = 'Table_Name' AND table_schema = 'dbo' 
+0

도움 주셔서 감사합니다.하지만 여전히 작동하지 않습니다. 실행하면 데이터가로드되지 않습니다. –

+0

해당 명령을 실행하는 사용자에게 적절한 사용 권한이 있습니까? SELECT * FROM INFORMATION_SCHEMA.COLUMNS를 실행하고 예상되는 것을 볼 수 있는지보십시오. –

+0

시도해 보니 데이터베이스의 모든 테이블과 열이로드되지만 액세스하려는 데이터베이스의 테이블과 열은로드되지 않습니다. –

0

테이블 이름이 Database_Name.DBO.Table_Name 형식이 없습니다. 테이블 이름은 varchar 값으로 사용됩니다. 그래서 이런 식으로 시도 :

USE Database_Name; 
select column_name from information_schema.columns 
where table_name = 'Table_Name' 
+0

구문이 저장 프로 시저에 있고 저장 프로 시저가 다른 데이터베이스의 것이므로 'USE Database_Name'을 사용할 수 없습니다. 그 이유는 다른 데이터베이스에서 테이블을 가져 오는 방법을 알고 싶기 때문입니다. –

0

이 내가 알아 낸 것입니다. 각 데이터베이스에는 고유 한 information_schema 뷰가 있으므로 다른 데이터베이스의 정보는 표시되지 않습니다. 따라서 다른 데이터베이스의 테이블에 대한 열 이름을 가져 오려면 해당 데이터베이스의 information_schema 뷰를 사용해야합니다.

{데이터베이스 이름} .information_schema

예 : @dbname 데이터베이스의 이름입니다

SET @Sql = CONCAT('INSERT INTO ', @DBName, '.dbo.colname_table (column_name) 
    SELECT COLUMN_NAME FROM ', @DBName, '.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = ''table_name'' AND TABLE_SCHEMA = ''dbo'' 
    ORDER BY ORDINAL_POSITION'); 

EXECUTE sp_executesql @Sql; 

.