
已解决问题
谷歌danhun101用户在2016.04.20提交了关于“锐界列出SQL Server中具有默认值的所有字段的语句”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-26T05:38:41。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
专家解答
通过查询任何数
Quote:
复制代码代码如下:
**LE
FROMdbo.sysobjectsSOINNERJOIN
LEFTJOIN
Wh**ERESO.xtype='U'
ORDERBYSO.[na
对Northwind
现在我在想这个很好的基本查
选择1:
通过编辑W
Quote:
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
所以记住,就因为你被告知没有更好的方法,依靠你作为一个**库管理员的本能来钻研。你永远不会知道你可能会得到些什么。