自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server默認值中的所有字段的列出

數(shù)據(jù)庫 SQL Server
我們今天主要和大家一起分享的是列出SQL Server默認值中的所有字段,以下就是文章的詳細內(nèi)容介紹,望大家借鑒。

此文章主要介紹的是列出SQL Server默認值中的所有字段,上個星期我在對一個供應(yīng)商開發(fā)的實際應(yīng)用數(shù)據(jù)庫按規(guī)定進行故障排除的時候,我們需要對他們數(shù)據(jù)庫中50個表的每一個都進行查看,以確保所有期望是SQL Server默認值的字段都被分配了默認值。

你可以想象這是一個多么令人畏懼的工作,而我立即提

 

上個星期我在對一個供應(yīng)商開發(fā)的數(shù)據(jù)庫按規(guī)定進行故障排除的時候,我們需要對他們數(shù)據(jù)庫中50個表的每一個都進行查看,以確保所有期望是默認值的字段都被分配了默認值。你可以想象這是一個多么令人畏懼的工作,而我立即提出了這個問題。有沒有一個比在SQL Server管理套件中打開每一個表來查看這個schema的更好方法嗎?

 

專家解答

 

通過查詢?nèi)魏螖?shù)據(jù)庫中的三個系統(tǒng)表,你可以獲得每個表的每一個字段的SQL Server默認值。下面是這個核心查詢。它返回分配給當前數(shù)據(jù)庫中每個用戶表的SQL Server默認值。這個查詢在SQL 2000和SQL 2005中都是兼容的。

  1. SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"   
  2. FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id   
  3. LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id   
  4. WHERE SO.xtype = 'U'   
  5. ORDER BY SO.[name], SC.colid  

sysobjects 為我們提供了表元數(shù)據(jù)。在這個例子中,我們只對表名稱感興趣。syscolumns 表存儲與每個表的各個字段相關(guān)聯(lián)的元數(shù)據(jù)。在這個例子中,我們只需要字段名稱。***,SQL Server默認值元數(shù)據(jù)由syscomments表提供。

 

對Northwind數(shù)據(jù)庫運行這個查詢生成下面的結(jié)果(為了簡短,省略了一些記錄)。注意,因為LEFT JOIN到syscomments表所以它將返回NULL默認值。

 

現(xiàn)在我在想這個很好的基本查詢版本有什么選擇。。。

選擇1:搜索特別的默認值

通過編輯WHERE條件語句,我們可以在所有的表中查看特別的SQL Server默認值。

  1. SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"   
  2. FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id   
  3. LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id   
  4. WHERE SO.xtype = 'U' AND SM.TEXT = '(0)'   
  5. ORDER BY SO.[name], SC.colid  

選擇2:只返回具有SQL Server默認值字段的信息

修改核心查詢的WHERE條件語句來忽略syscomments.text表中的NULL值,這個技巧如下所示:

  1. SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"   
  2. FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id   
  3. LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id   
  4. WHERE SO.xtype = 'U' AND SM.TEXT IS NOT NULL   
  5. ORDER BY SO.[name], SC.colid  

但是,將FROM條件從句中的JOIN從一個LEFT JOIN改為一個INNER JOIN會提供優(yōu)化:

 

  1. SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"   
  2. FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id   
  3. INNER JOIN dbo.syscomments SM ON SC.cdefault = SM.id   
  4. WHERE SO.xtype = 'U'   
  5. ORDER BY SO.[name], SC.colid  

其實還有另一個選擇,利用SQL 2005中的系統(tǒng)目錄視圖。前面的查詢給我提供了這時所需要的信息,并在SQL 2000和SQL 2005中都可以使用,在SQL2000實例中可以挖掘出與這個SQL Server默認值(實際上是一個默認約束)關(guān)聯(lián)的額外元數(shù)據(jù)。通過將這個查詢特定在系統(tǒng)目錄視圖上,我們可以獲得在之前的查詢中沒有顯示出來的額外信息。

  1. SELECT ST.[name] AS "Table Name", SC.[name] AS "Column Name", SD.definition AS "Default Value", SD.[name] AS "Constraint Name"   
  2. FROM sys.tables ST INNER JOIN sys.syscolumns SC ON ST.[object_id] = SC.[id]   
  3. INNER JOIN sys.default_constraints SD ON ST.[object_id] = SD.[parent_object_id] AND SC.colid = SD.parent_column_id   
  4. ORDER BY ST.[name], SC.colid  

所以記住,就因為你被告知沒有更好的方法,依靠你作為一個數(shù)據(jù)庫管理員的本能來鉆研。你永遠不會知道你可能會得到些什么。

 

【編輯推薦】

  1. SQL Server數(shù)據(jù)庫Processor Affinity概述
  2. 破解SQL Server占內(nèi)存過多很簡單!
  3. SQL Server 2005快照與查詢的使用場景
  4. 從Oracle數(shù)據(jù)庫到SQL Server透明網(wǎng)關(guān)的正確配置
  5. SQL Server拆分字符串的3常用種方法

 

責(zé)任編輯:佚名 來源: 每日經(jīng)濟新聞
相關(guān)推薦

2010-09-28 10:23:36

SQL修改字段

2010-09-03 10:52:10

SQL刪除

2010-10-22 16:56:35

sql server刪

2010-09-28 15:24:43

sql語句

2010-09-28 10:35:58

SQL字段默認值

2010-09-07 16:05:23

SQL語句刪除

2021-02-25 13:40:17

MySQL數(shù)據(jù)庫默認值

2012-08-01 09:50:11

交互設(shè)計UI設(shè)計

2010-09-25 15:37:38

SQL語句

2010-10-22 15:36:57

2010-10-20 10:04:36

sql server自

2010-06-28 09:59:47

SQL Server自

2018-04-12 13:41:14

Windows 10Windows文件關(guān)聯(lián)重置

2010-11-09 12:09:23

SQL Server查

2010-07-14 17:37:33

SQL Server

2010-09-08 13:21:19

SQL刪除約束

2018-04-13 14:32:02

Windows10文件關(guān)聯(lián)默認值

2010-07-09 12:49:41

SQL Server自

2010-11-23 16:49:42

MySQL設(shè)置當前時間

2022-06-21 08:13:34

MySQL查詢數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號