一、取得Table清單
--取TABLE LIST--------------------------------------------------- select a.TABLE_CATALOG as INSTANCE, a.TABLE_NAME as 表格名稱, isnull((SELECT value FROM fn_listextendedproperty (NULL, 'schema', a.Table_schema, 'table', a.TABLE_NAME, default, default) WHERE name='MS_Description' and objtype='TABLE' and objname Collate Chinese_Taiwan_Stroke_CI_AS = a.TABLE_NAME),'') as 表格說明, (SELECT CASE WHEN count(*) >0 THEN 'Y' ELSE 'N' END FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.Table_name=a.TABLE_NAME AND collation_name='Chinese_Taiwan_Stroke_CS_AI' ) as 定序, convert(varchar,b.create_date,111) as 建立日期, convert(varchar,b.modify_date,111) as 修改日期 from INFORMATION_SCHEMA.TABLES a LEFT JOIN sys.all_objects b ON b.object_id=object_id(a.TABLE_NAME) ORDER BY a.TABLE_NAME
二、取得Table定義
--取TABLE SCHEMA-------------------------------------------------- DECLARE @TABLE varchar(20) DECLARE @table_id int SET @TABLE='ExchangeRate' select @table_id = object_id(@TABLE) --導出TABLE Schema SELECT a.Table_name as 表格名稱 ,b.COLUMN_NAME as 欄位名稱 ,b.DATA_TYPE as 資料型別 ,(CASE WHEN b.CHARACTER_MAXIMUM_LENGTH IS NULL THEN CAST(b.NUMERIC_PRECISION as varchar)+','+CAST(b.NUMERIC_SCALE as varchar) ELSE CAST(b.CHARACTER_MAXIMUM_LENGTH as varchar) END) as 長度 ,isnull(b.COLUMN_DEFAULT,'') as 預設值 ,b.IS_NULLABLE as 是否允許空值 ,(SELECT CASE WHEN COUNT(*) = 1 THEN 'PK' ELSE ' ' END FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE d WHERE d.TABLE_NAME = a.Table_name AND d.COLUMN_NAME= b.COLUMN_NAME) as PK ,(SELECT CASE WHEN c.collation_name='Chinese_Taiwan_Stroke_CS_AI' THEN 'Y' ELSE 'N' END FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.Table_name=a.Table_name AND c.COLUMN_NAME=b.COLUMN_NAME) as 定序 ,( SELECT value FROM fn_listextendedproperty (NULL, 'schema', a.Table_schema, 'table', a.TABLE_NAME, 'column', default) WHERE name='MS_Description' and objtype='COLUMN' and objname Collate Chinese_Taiwan_Stroke_CI_AS = b.COLUMN_NAME ) as 欄位描述 FROM INFORMATION_SCHEMA.TABLES a LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.TABLE_NAME = b.TABLE_NAME WHERE TABLE_TYPE='BASE TABLE' AND a.Table_name=@TABLE ORDER BY a.TABLE_NAME , b.ORDINAL_POSITION --導出Primary Key select Z.TABLE_NAME as 表格名稱, Z.PK_NAME as PK名稱, Z.COLUMN_NAME as 欄位名稱, Z.KEY_SEQ as 順序 from ( select TABLE_QUALIFIER = convert(sysname,db_name()), TABLE_OWNER = convert(sysname,schema_name(o.schema_id)), TABLE_NAME = convert(sysname,o.name), COLUMN_NAME = convert(sysname,c.name), KEY_SEQ = convert (smallint, case when c.name = index_col(@TABLE, i.index_id, 1) then 1 when c.name = index_col(@TABLE, i.index_id, 2) then 2 when c.name = index_col(@TABLE, i.index_id, 3) then 3 when c.name = index_col(@TABLE, i.index_id, 4) then 4 when c.name = index_col(@TABLE, i.index_id, 5) then 5 when c.name = index_col(@TABLE, i.index_id, 6) then 6 when c.name = index_col(@TABLE, i.index_id, 7) then 7 when c.name = index_col(@TABLE, i.index_id, 8) then 8 when c.name = index_col(@TABLE, i.index_id, 9) then 9 when c.name = index_col(@TABLE, i.index_id, 10) then 10 when c.name = index_col(@TABLE, i.index_id, 11) then 11 when c.name = index_col(@TABLE, i.index_id, 12) then 12 when c.name = index_col(@TABLE, i.index_id, 13) then 13 when c.name = index_col(@TABLE, i.index_id, 14) then 14 when c.name = index_col(@TABLE, i.index_id, 15) then 15 when c.name = index_col(@TABLE, i.index_id, 16) then 16 end), PK_NAME = convert(sysname,k.name) from sys.indexes i, sys.all_columns c, sys.all_objects o, sys.key_constraints k where o.object_id = @table_id and o.object_id = c.object_id and o.object_id = i.object_id and k.parent_object_id = o.object_id and k.unique_index_id = i.index_id and i.is_primary_key = 1 and (c.name = index_col (@TABLE, i.index_id, 1) or c.name = index_col (@TABLE, i.index_id, 2) or c.name = index_col (@TABLE, i.index_id, 3) or c.name = index_col (@TABLE, i.index_id, 4) or c.name = index_col (@TABLE, i.index_id, 5) or c.name = index_col (@TABLE, i.index_id, 6) or c.name = index_col (@TABLE, i.index_id, 7) or c.name = index_col (@TABLE, i.index_id, 8) or c.name = index_col (@TABLE, i.index_id, 9) or c.name = index_col (@TABLE, i.index_id, 10) or c.name = index_col (@TABLE, i.index_id, 11) or c.name = index_col (@TABLE, i.index_id, 12) or c.name = index_col (@TABLE, i.index_id, 13) or c.name = index_col (@TABLE, i.index_id, 14) or c.name = index_col (@TABLE, i.index_id, 15) or c.name = index_col (@TABLE, i.index_id, 16)) ) Z order by TABLE_NAME, KEY_SEQ SELECT Table_name, COLUMN_NAME, CASE WHEN collation_name='Chinese_Taiwan_Stroke_CS_AI' THEN 'Y' ELSE 'N' END FROM INFORMATION_SCHEMA.COLUMNS WHERE collation_name='Chinese_Taiwan_Stroke_CS_AI'