主頁(yè) > 知識(shí)庫(kù) > 列出SQL Server中具有默認(rèn)值的所有字段的語(yǔ)句

列出SQL Server中具有默認(rèn)值的所有字段的語(yǔ)句

熱門標(biāo)簽:溫州語(yǔ)音外呼系統(tǒng)排名 四川穩(wěn)定外呼系統(tǒng)公司 怎么在高德地圖標(biāo)注多個(gè)點(diǎn) AI智能云呼電話機(jī)器人怎么注冊(cè) 沈陽(yáng)外呼系統(tǒng)有效果嗎 福州外呼系統(tǒng)招商 電話機(jī)器人接口是什么樣的 百度地圖標(biāo)注信息怎么修改 商家地圖標(biāo)注圖片
專家解答
  通過(guò)查詢?nèi)魏螖?shù)據(jù)庫(kù)中的三個(gè)系統(tǒng)表,你可以獲得每個(gè)表的每一個(gè)字段的默認(rèn)值。下面是這個(gè)核心查詢。它返回分配給當(dāng)前數(shù)據(jù)庫(kù)中每個(gè)用戶表的默認(rèn)值。這個(gè)查詢?cè)赟QL 2000和SQL 2005中都是兼容的。
  
Quote: 
復(fù)制代碼 代碼如下:

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 為我們提供了表元數(shù)據(jù)。在這個(gè)例子中,我們只對(duì)表名稱感興趣。syscolumns 表存儲(chǔ)與每個(gè)表的各個(gè)字段相關(guān)聯(lián)的元數(shù)據(jù)。在這個(gè)例子中,我們只需要字段名稱。最后,默認(rèn)值元數(shù)據(jù)由syscomments表提供。
  對(duì)Northwind數(shù)據(jù)庫(kù)運(yùn)行這個(gè)查詢生成下面的結(jié)果(為了簡(jiǎn)短,省略了一些記錄)。注意,因?yàn)長(zhǎng)EFT JOIN到syscomments表所以它將返回NULL默認(rèn)值。
按此在新窗口打開圖片
現(xiàn)在我在想這個(gè)很好的基本查詢版本有什么選擇。。。
  選擇1:搜索特別的默認(rèn)值
  通過(guò)編輯WHERE條件語(yǔ)句,我們可以在所有的表中查看特別的默認(rèn)值。
  
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:只返回具有默認(rèn)值字段的信息
  修改核心查詢的WHERE條件語(yǔ)句來(lái)忽略syscomments.text表中的NULL值,這個(gè)技巧如下所示:
  
Quote:
復(fù)制代碼 代碼如下:

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從一個(gè)LEFT JOIN改為一個(gè)INNER JOIN會(huì)提供優(yōu)化:
  
Quote:
復(fù)制代碼 代碼如下:

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

按此在新窗口打開圖片
  其實(shí)還有另一個(gè)選擇,利用SQL 2005中的系統(tǒng)目錄視圖。前面的查詢給我提供了這時(shí)所需要的信息,并在SQL 2000和SQL 2005中都可以使用,在SQL2000實(shí)例中可以挖掘出與這個(gè)默認(rèn)值(實(shí)際上是一個(gè)默認(rèn)約束)關(guān)聯(lián)的額外元數(shù)據(jù)。通過(guò)將這個(gè)查詢特定在系統(tǒng)目錄視圖上,我們可以獲得在之前的查詢中沒(méi)有顯示出來(lái)的額外信息。
  
Quote:
復(fù)制代碼 代碼如下:

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
按此在新窗口打開圖片
所以記住,就因?yàn)槟惚桓嬷獩](méi)有更好的方法,依靠你作為一個(gè)數(shù)據(jù)庫(kù)管理員的本能來(lái)鉆研。你永遠(yuǎn)不會(huì)知道你可能會(huì)得到些什么。
您可能感興趣的文章:
  • input之怎么清除默認(rèn)值
  • 用sql設(shè)置access的默認(rèn)值
  • MySQL表字段設(shè)置默認(rèn)值(圖文教程及注意細(xì)節(jié))

標(biāo)簽:汕尾 邯鄲 寶雞 來(lái)賓 無(wú)錫 七臺(tái)河 營(yíng)口 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《列出SQL Server中具有默認(rèn)值的所有字段的語(yǔ)句》,本文關(guān)鍵詞  列出,SQL,Server,中,具有,默認(rèn)值,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《列出SQL Server中具有默認(rèn)值的所有字段的語(yǔ)句》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于列出SQL Server中具有默認(rèn)值的所有字段的語(yǔ)句的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章