close

剛好最近朋友因為比對資料庫內容時

在找尋如何比對到資料表中有那些欄位有設定預設值以及其預設值為何

而老師也解答了可以如何處理

使用系統資料表

  • 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的資料,即可取得這些欄位所記錄的預設值資料

 

 

arrow
arrow
    全站熱搜

    Louis 發表在 痞客邦 留言(0) 人氣()