2013-05-15 2 views
16

T-SQL (SQL Server 2000). 데이터베이스의 모든 테이블과 컬럼을 나열하려면 어떻게합니까? 또한 별도의 쿼리에서 데이터 형식 및 제약 조건 (NULLS 등)과 함께 모든 열을 나열하는 방법이 있습니다. 감사.T-SQL 목록 테이블, 열

+3

하 다음은 표시 할 수있는 방법의 커플은 너 뭐 해봤 니? –

+2

'INFORMATION_SCHEMA' 뷰나'sysobjects','syscolumns' 등을보세요. –

답변

43

information schema을 확인하십시오.

select * 
from MyDatabaseName.information_schema.columns 
order by table_name, ordinal_position 
+0

감사합니다. Tim 감사합니다. 테이블이 할당 된 데이터베이스를 추가하는 방법이 있습니까? 나는 카타로그가 마스터 인 것을 본다. – user1804387

+0

'use MyDatabaseName;', 그런 다음 쿼리. [MSDN : 데이터베이스 선택] (http://msdn.microsoft.com/en-us/library/ms180770.aspx) 다른 방법으로는, 일반적인 [4-part fashion] (http://msdn.microsoft.com/en-us/library/ms177563.aspx)의'from' 절에 DB 이름을 추가하십시오.). –

+0

방금 ​​발견했습니다. 다시 한 번 감사드립니다. – user1804387

10

여러 가지 방법이 있습니다.

옵션 1 :

SELECT db_name() as DATABASE_NAME, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, 
     COLUMN_DEFAULT, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, 
     NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, 
     DATETIME_PRECISION 
FROM INFORMATION_SCHEMA.COLUMNS 

옵션 2 :

DECLARE @SQL VARCHAR(8000) 
SELECT @SQL = '' 
SELECT @SQL = @SQL + 'UNION 
SELECT ''' + name + ''' [DataBaseName], t.name [TableName], c.name [ColumnName], st.name [DataType] FROM ' + name + '..sysobjects t INNER JOIN ' + name + '..syscolumns c ON t.id = c.id INNER JOIN '+ name + '..systypes st on c.xtype = st.xtype where t.xtype = ''U''' 
FROM master..sysdatabases 
WHERE name IN ('databasename1', 'databaseName2') -- change here !! 
SELECT @SQL = RIGHT(@SQL, LEN(@SQL)-5) + ' ORDER BY 1, 2, 3' 
EXEC(@SQL) 

옵션 3 :

select db_name() as database_name 
    ,table_name = sysobjects.name 
    ,column_name = syscolumns.name 
    ,datatype = systypes.name 
    ,length = syscolumns.length 
from sysobjects 
inner join syscolumns on sysobjects.id = syscolumns.id 
inner join systypes on syscolumns.xtype = systypes.xtype 
where sysobjects.xtype = 'U' 
order by sysobjects.name 
    ,syscolumns.colid