列出SQL Server中具有默认值的所有字段的语句

时间:2016.04.20 发布人:danhun101

列出SQL Server中具有默认值的所有字段的语句

已解决问题

谷歌danhun101用户在2016.04.20提交了关于“锐界列出SQL Server中具有默认值的所有字段的语句”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-26T05:38:41。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,谢谢你帮我,祝你快乐,愿你事事如意 !

希望以下的回答,能够帮助你。

第1个回答

用户名:sh1976sh  

专家解答
  通过查询任何数失鲁据库中的三个系统表,你可以获得每个表的每一个字争容续远带觉段的默认值。下面是这个核心查询。它返回分配给当前**库中每个用说户表的默认值。这个查询在SQL来自2000和SQL2005中都触环有丝同什件是兼容的。
  
Quote:
复制代码代码如下:
**LECT***.NAMEAS"TableName",***.也封顺致战孔NAMEAS"Co问答lumnName",SM.TEXTAS"DefaultValue官吃已笔厂初农数次木"
  FROMdbo.sysobjectsSOINNERJOIN护架牛苗孩dbo.syscolumnsSCON***.id=***.id
  LEFTJOIN垂河盟格马运许发风车燃dbo.syscomme材航轮送望简双血频ntsSMONS变套C.cdefault=SM.id
  Wh**ERESO.xtype='U'
  ORDERBYSO.[na案态额me],SC.colid

  sysobjects为我们提供了表元**。在这个例子中,我们只对表名称感兴趣。syscolumns表存储与每个表的各个字段相关联的元**。在这个例子中,我们只需要字段名称。最后,默认值元**由syscomments表提供。
  对Northwind**库运行这个查询生成下面的结果(为了简短,省略了一些记录)。注意,因为LEFTJOIN到sysco士眼爱万角便更mments表所以它将返那花杨件院末县球书回**LL默认值。

现在我在想这个很好的基本查清绿鲁著向写距冲询版本有什么选择。。。
  选择1:食木组检商易厚现搜索特别的默认值
  通过编辑W溶液h**ERE条件语句,我们可以在圆尼所有的表中查看特别的默认值。
  
Quote:
施刻轮群认双头消条续弦**LECT***.NAMEAS"TableName",***.NAMEAS"ColumnName",SM.TEXTAS"DefaultValue"
  FROMdbo.sysobjectsSOINNERJOINdbo.syscolumnsSCON***.id=***.id
  LEFTJOINdbo.syscommentsSMONSC.cdefault=SM.id
  Wh**ERESO.xtype='U'ANDSM.TEXT='(0)'
  ORDERBYSO.[name],SC.colid
选择2:只返回具有默认值字段的信息
  修改核心查询的Wh**ERE条件语句来忽略syscomments.text表中的**LL值,这个技巧如下所示:
  
Quote:
复制代码代码如下:
**LECT***.NAMEAS"TableName",***.NAMEAS"ColumnName",SM.TEXTAS"DefaultValue"
  FROMdbo.sysobjectsSOINNERJOINdbo.syscolumnsSCON***.id=***.id
  LEFTJOINdbo.syscommentsSMONSC.cdefault=SM.id
  Wh**ERESO.xtype='U'ANDSM.TEXTISNOT**LL
  ORDERBYSO.[name],SC.colid

  但是,将FROM条件从句中的JOIN从一个LEFTJOIN改为一个INNERJOIN会提供优化:
  
Quote:
复制代码代码如下:
**LECT***.NAMEAS"TableName",***.NAMEAS"ColumnName",SM.TEXTAS"DefaultValue"
  FROMdbo.sysobjectsSOINNERJOINdbo.syscolumnsSCON***.id=***.id
  INNERJOINdbo.syscommentsSMONSC.cdefault=SM.id
  Wh**ERESO.xtype='U'
  ORDERBYSO.[name],SC.colid


  其实还有另一个选择,利用SQL2005中的系统目录视图。前面的查询给我提供了这时所需要的信息,并在SQL2000和SQL2005中都可以使用,在SQL2000实例中可以挖掘出与这个默认值(实际上是一个默认约束)关联的额外元**。通过将这个查询特定在系统目录视图上,我们可以获得在之前的查询中没有显示出来的额外信息。
  
Quote:
复制代码代码如下:
**LECTST.[name]AS"TableName",SC.[name]AS"ColumnName",SD.definitionAS"DefaultValue",SD.[name]AS"ConstraintName"
  FROMsys.tablesSTINNERJOINsys.syscolumnsSCONST.[object_id]=SC.[id]
  INNERJOINsys.default_constraintsSDONST.[object_id]=SD.[parent_object_id]ANDSC.colid=SD.parent_column_id
  ORDERBYST.[name],SC.colid

所以记住,就因为你被告知没有更好的方法,依靠你作为一个**库管理员的本能来钻研。你永远不会知道你可能会得到些什么。