一、前言 近兩天項目升級數據遷移,將老版本(sqlserver)的數據遷移到新版本(mysql)資料庫,需要整理一個Excel表格出來,映射兩個庫之間的表格欄位,示例如下: Mysql資料庫查詢表結構很方便,用客戶端(SQLyog)可以直接複製出需要的表結構,據說可以用簡單的命令查詢表結構,但是不會 ...
一、前言
近兩天項目升級數據遷移,將老版本(sqlserver)的數據遷移到新版本(mysql)資料庫,需要整理一個Excel表格出來,映射兩個庫之間的表格欄位,示例如下:
Mysql資料庫查詢表結構很方便,用客戶端(SQLyog)可以直接複製出需要的表結構,據說可以用簡單的命令查詢表結構,但是不會...
Sqlserver導出表結構就很坑爹了,首先呢客戶端不支持,表設計頁面雖說可以複製表結構但是不包含欄位註釋,想想這種場景應該很常見不可能沒有解決方案的,於是在網上發現了一段腳本,稍加調整就可以查詢出需要的表結構
二、腳本及查詢示例
1 SELECT 表名 = CASE WHEN a.colorder = 1 THEN d.name ELSE '' END , 2 欄位說明 = ISNULL(g.[value], '') , 3 欄位名 = a.name , 4 類型 = CASE WHEN b.name IN ( 'varchar', 'nvarchar' ) 5 THEN b.name + '(' 6 + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4)) 7 + ')' 8 WHEN b.name = 'decimal' 9 THEN b.name + '(' 10 + CAST(COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS VARCHAR(4)) 11 + ',' 12 + CAST(COLUMNPROPERTY(a.id, a.name, 'Scale') AS VARCHAR(4)) 13 + ')' 14 ELSE b.name 15 END 16 FROM syscolumns a -- 列名 17 LEFT JOIN systypes b ON a.xusertype = b.xusertype -- 類型 18 INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <> 'dtproperties' --篩選用戶對象 19 --LEFT JOIN syscomments e ON a.cdefault = e.id --預設值 20 LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id --擴展屬性(欄位說明) 21 --LEFT JOIN sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0 --擴展屬性(表說明) 22 WHERE d.name = 'Merchant' --可修改表名 23 ORDER BY a.id , a.colorderView Code
三、參考鏈接
http://blog.csdn.net/shandian534/article/details/39249245
四、腳本解讀
syscolumns | |
為每個表和視圖中的每列返回一行,併為資料庫中的存儲過程的每個參數返回一行。 | |
name | 列名或過程參數的名稱。 |
id | 此列所屬表的對象 ID,或者與此參數關聯的存儲過程的 ID |
xusertype | 擴展的用戶定義數據類型的 ID |
colid | 列 ID 或參數 ID |
systypes | |
對於每種系統提供數據類型和用戶定義數據類型,均包含一行信息。 | |
name | 數據類型名稱 |
xusertype | 擴展用戶類型 |
sysobjects | |
在資料庫中創建的每個對象(例如約束、預設值、日誌、規則以及存儲過程)都對應一行 | |
id | 對象標識號 |
xtype | 對象類型。 可以是以下對象類型之一: AF = 聚合函數 (CLR) C = CHECK 約束 D = 預設值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日誌 FN = 標量函數 FS = 程式集 (CLR) 標量函數 FT = 程式集 (CLR) 表值函數 IF = 內聯表函數 IT = 內部表 P = 存儲過程 PC = 程式集 (CLR) 存儲過程 PK = PRIMARY KEY 約束(type 為 K) RF = 複製篩選存儲過程 S = 系統表 SN = 同義詞 SQ = 服務隊列 TA = 程式集 (CLR) DML 觸發器 TF = 表函數 TR = SQL DML 觸發器 TT = 表類型 U = 用戶表 UQ = UNIQUE 約束(type 為 K) V = 視圖 X = 擴展存儲過程 |
name | 對象名(dtproperties自動生成表此處不討論) |
sys.extended_properties |
|
針對當前資料庫中的每個擴展屬性返回一行 | |
class |
標識其上存在屬性的項類。 可以是下列值之一: 0 = 資料庫 1 = 對象或列 2 = 參數 3 = 架構 4 = 資料庫主體 5 = 程式集 6 = 類型 7 = 索引 10 = XML 架構集合 15 = 消息類型 16 = 服務約定 17 = 服務 18 = 遠程服務綁定 19 = 路由 20 = 數據空間(文件組或分區方案) 21 = 分區函數 22 = 資料庫文件 27 = 計劃指南 |
major_id |
其上存在擴展屬性的項的 ID,根據項類進行解釋。 對於大多數項,該 ID 適用於類所表示的項。 下列是非標準主 ID 的解釋: 如果 class 為 0,則 major_id 始終為 0。 如果 class 為 1、2 或 7,則 major_id 為 object_id。 |
minor_id |
其上存在擴展屬性的項的輔助 ID,根據項類進行解釋。 對於大多數項,ID 為 0;否則,ID 為下列值之一: 如果 class = 1,則 minor_id 在項為列的情況下等於 column_id,在項為對象的情況下等於 0。 如果 class = 2,則 minor_id 為 parameter_id。 如果 class = 7,則 minor_id 為 index_id。 |
COLUMNPROPERTY | |
返回有關列或參數的信息 | |
參數: | |
id | 一個表達式,其中包含表或過程的標識符 (ID) |
column | 一個表達式,其中包含列或參數的名稱 |
property | 一個表達式,其中包含要為 id 返回的信息 |