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

xnzkp8536

xnzkp8536

2016-02-19 10:45

今天给大家分享的是由图老师小编精心为您推荐的列出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
按此在新窗口打开图片
所以记住,就因为你被告知没有更好的方法,依靠你作为一个数据库管理员的本能来钻研。你永远不会知道你可能会得到些什么。
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
列出SQL Server中具有默认值的所有字段的语句

sql server中datetime字段去除时间的语句

编程语言 网络编程
sql server中datetime字段去除时间的语句

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Sql 语句:显示 Sql Server 中所有表中的信息

编程语言 网络编程
Sql 语句:显示 Sql Server 中所有表中的信息

在SQL Server 2005中如何列出所有存储过程

编程语言 网络编程
在SQL Server 2005中如何列出所有存储过程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL Server 中调整自增字段的当前初始值

编程语言 网络编程
SQL Server 中调整自增字段的当前初始值

SQL SERVER中字段类型及说明

编程语言 网络编程
SQL SERVER中字段类型及说明

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10设置默认显示图标而非缩略图的方法

Win10设置默认显示图标而非缩略图的方法

实例学习mssql存储过程分析

实例学习mssql存储过程分析
下拉加载更多内容 ↓