共計 2081 個字符,預計需要花費 6 分鐘才能閱讀完成。
本篇文章為大家展示了 SQL Server 中具有默認值的所有字段的語句有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
專家解答 通過查詢任何數據庫中的三個系統表,你可以獲得每個表的每一個字段的默認值。下面是這個核心查詢。它返回分配給當前數據庫中每個用戶表的默認值。這個查詢在 SQL 2000 和 SQL 2005 中都是兼容的。Quote: 復制代碼 代碼如下:
SELECT SO.NAME AS Table Name , SC.NAME AS Column Name , SM.TEXT AS Default Value FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id WHERE SO.xtype = U ORDER BY SO.[name], SC.colid
sysobjects 為我們提供了表元數據。在這個例子中,我們只對表名稱感興趣。syscolumns 表存儲與每個表的各個字段相關聯的元數據。在這個例子中,我們只需要字段名稱。最后,默認值元數據由 syscomments 表提供。對 Northwind 數據庫運行這個查詢生成下面的結果(為了簡短,省略了一些記錄)。注意,因為 LEFT JOIN 到 syscomments 表所以它將返回 NULL 默認值。現在我在想這個很好的基本查詢版本有什么選擇。。。選擇 1:搜索特別的默認值 通過編輯 WHERE 條件語句,我們可以在所有的表中查看特別的默認值。Quote: SELECT SO.NAME AS Table Name , SC.NAME AS Column Name , SM.TEXT AS Default Value FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id WHERE SO.xtype = U AND SM.TEXT = (0) ORDER BY SO.[name], SC.colid 選擇 2:只返回具有默認值字段的信息 修改核心查詢的 WHERE 條件語句來忽略 syscomments.text 表中的 NULL 值,這個技巧如下所示:Quote: 復制代碼 代碼如下:
SELECT SO.NAME AS Table Name , SC.NAME AS Column Name , SM.TEXT AS Default Value FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id WHERE SO.xtype = U AND SM.TEXT IS NOT NULL ORDER BY SO.[name], SC.colid
但是,將 FROM 條件從句中的 JOIN 從一個 LEFT JOIN 改為一個 INNER JOIN 會提供優化:Quote: 復制代碼 代碼如下:
SELECT SO.NAME AS Table Name , SC.NAME AS Column Name , SM.TEXT AS Default Value FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id INNER JOIN dbo.syscomments SM ON SC.cdefault = SM.id WHERE SO.xtype = U ORDER BY SO.[name], SC.colid
其實還有另一個選擇,利用 SQL 2005 中的系統目錄視圖。前面的查詢給我提供了這時所需要的信息,并在 SQL 2000 和 SQL 2005 中都可以使用,在 SQL2000 實例中可以挖掘出與這個默認值 (實際上是一個默認約束) 關聯的額外元數據。通過將這個查詢特定在系統目錄視圖上,我們可以獲得在之前的查詢中沒有顯示出來的額外信息。Quote: 復制代碼 代碼如下:
SELECT ST.[name] AS Table Name , SC.[name] AS Column Name , SD.definition AS Default Value , SD.[name] AS Constraint Name FROM sys.tables ST INNER JOIN sys.syscolumns SC ON ST.[object_id] = SC.[id] INNER JOIN sys.default_constraints SD ON ST.[object_id] = SD.[parent_object_id] AND SC.colid = SD.parent_column_id ORDER BY ST.[name], SC.colid
所以記住,就因為你被告知沒有更好的方法,依靠你作為一個數據庫管理員的本能來鉆研。你永遠不會知道你可能會得到些什么。
上述內容就是 SQL Server 中具有默認值的所有字段的語句有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。