# 使用T-SQL 匯出 DB Schema & SP、View、Fn、Trigger... ###### tags: `SQL` ## DB Schema ### 別人的範本 ``` USE 資料庫名稱; SELECT a.Table_schema +'.'+a.Table_name as 表格名稱 ,b.COLUMN_NAME as 欄位名稱 ,b.DATA_TYPE as 資料型別 ,isnull(b.CHARACTER_MAXIMUM_LENGTH,'') as 長度 ,isnull(b.COLUMN_DEFAULT,'') as 預設值 ,b.IS_NULLABLE 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' ORDER BY a.TABLE_NAME , b.ORDINAL_POSITION -------------------------------------------這是指令碼------------------------------------------------------ 簡單介紹一下上面的語法 --INFORMATION_SCHEMA.TABLES //查詢該資料庫裡所有資料表資訊 --INFORMATION_SCHEMA.COLUMNS //查詢該資料表裡所有資料欄位資訊 --fn_listextendedproperty //列出資料表欄位的資訊(為了取得 欄位描述 而使用) --※Chinese_Taiwan_Stroke_CI_AS //這是指定資料庫的編碼(此為 台灣繁體中文且不分大小寫) ``` ![](https://i.imgur.com/hZPQKsm.png) [資料來源-散步在海洋中的碼農-testAlonso](https://dotblogs.azurewebsites.net/mepowerlmay/2019/11/11/150411) ### 自己修改 ``` SELECT a.Table_name as 表格名稱 ,b.COLUMN_NAME as 欄位名稱 ,b.DATA_TYPE as 資料型別 ,CASE isnull(b.CHARACTER_MAXIMUM_LENGTH,'') WHEN -1 then 'Max' WHEN 0 then '' ELSE CONVERT (nvarchar(max), isnull(b.CHARACTER_MAXIMUM_LENGTH,'')) END as 長度 --,isnull(b.COLUMN_DEFAULT,'') as 預設值 ,CASE b.IS_NULLABLE WHEN 'YES' THEN 'True' WHEN 'NO' THEN 'False' END 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 欄位描述, CASE WHEN c.COLUMN_NAME is not null THEN 'True' END as 是否為主鍵 FROM INFORMATION_SCHEMA.TABLES a LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.TABLE_NAME = b.TABLE_NAME LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE c ON a.TABLE_NAME = c.TABLE_NAME and b.COLUMN_NAME = c.COLUMN_NAME WHERE TABLE_TYPE='BASE TABLE' ORDER BY a.TABLE_NAME , b.ORDINAL_POSITION ``` ![](https://i.imgur.com/6gK4SIZ.png) --- ## 查看 SP、View、Fn、Trigger... ``` SELECT o.name ,o.xtype , c.text FROM SYS.SYSOBJECTS o inner join SYS.SYSCOMMENTS c on o.id =c.id WHERE xtype <> 'D' -- D 是顯示預設值所以不看 order by xtype ``` ### 物件類型 XType * AF = 彙總函式 (CLR) * C = CHECK 條件約束 * D = 預設值或 DEFAULT 條件約束 * F = FOREIGN KEY 條件約束 * L = 記錄 FN = 純量函數 * FS = 組件 (CLR) 純量函數 * FT = 組件 (CLR) 資料表值函式 * IF = 內嵌資料表函數 * IT = 內部資料表 * P = 預存程序 * PC = 組件 (CLR) 預存程序 * PK = PRIMARY KEY 條件約束 (類型是 K) * RF = 複寫篩選預存程序 * S = 系統資料表 * SN = 同義字 * SQ = 服務佇列 * TA = 組件 (CLR) DML 觸發程序 * TF = 資料表函數 * TR = SQL DML 觸發程序 * TT = 資料表類型 * U = 使用者資料表 * UQ = UNIQUE 條件約束 (類型是 K) * V = 檢視 * X = 擴充預存程序 ### 查看檢視表 View 與 資料表 Table 的 欄位 Column 關連性 ``` SELECT VIEW_SCHEMA, VIEW_NAME, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE ORDER BY VIEW_NAME, TABLE_NAME, COLUMN_NAME; ``` [參考來源-[SQL] 條列 Stored Procedure、Function、View、Trigger ](https://blog.xuite.net/tolarku/blog/42066457)