剛好最近朋友因為比對資料庫內容時
在找尋如何比對到資料表中有那些欄位有設定預設值以及其預設值為何
而老師也解答了可以如何處理
使用系統資料表
- sys.objects (SQL2000版:dbo.sysobjects):http://msdn.microsoft.com/zh-tw/library/ms190324.aspx
- sys.columns (SQL2000版:dbo.syscolumns):http://msdn.microsoft.com/zh-tw/library/ms176106.aspx
- sys.syscomments(SQL2000版:dbo.comments):http://msdn.microsoft.com/zh-tw/library/ms186293.asp
語法
SELECT SO.name as 'Table Name',SC.name as 'Column Name',SM.text as 'Default Value'
FROM sys.objects SO
JOIN sys.columns SC on SO.object_id=SC.object_id
LEFT JOIN sys.syscomments SM on SC.default_object_id=SM.id
WHERE SO.type='U'
SQL2000語法
SELECT SO.name as 'Table Name',SC.name as 'Column Name',SM.text as 'Default Value'
FROM dbo.sysobjects SO
JOIN dbo.syscolumns SC on SO.id=SC.id
LEFT JOIN dbo.syscomments SM on SC.colid=SM.id
WHERE SO.xtype='U'
輸出結果(部分資訊)
Table Name | Column Name | Default Value |
Products | unitprice | ((0)) |
Products | discontinued | ((0)) |
Orders | freight | ((0)) |
OrderDetails | unitprice | ((0)) |
OrderDetails | qty | ((1)) |
OrderDetails | discount | ((0)) |
說明
- sys.objects (SQL2000版:dbo.sysobjects)
系統物件表當中先找出使用者建立的資料表,type='U',並且透過資料表(物件)編號object_id去對應
- sys.columns (SQL2000版:dbo.syscolumns)
系統欄位表中,找出sys.columns的欄位object_id等於sys.objects取得的object_id,即可取得使用者所建立的資料表所有欄位
- sys.syscomments(SQL2000版:dbo.comments)
最後對應到sys.syscomments欄位id等於sys.columns欄位default_object_id的資料,即可取得這些欄位所記錄的預設值資料
留言列表