列出SQLServer中具有默认值的所有字段

列出SQLServer中具有默认值的所有字段,第1张

列出SQLServer中具有默认值的所有字段,第2张

当根据规定对数据库进行故障排除时,需要检查数据库中的50个表中的每一个,以确保所有预期为默认值的字段都被赋予默认值。想象一下这是一项多么令人生畏的工作。除了在SQL Server管理套件中打开每个表之外,还有更好的方法来查看此架构吗?
通过查询任意数据库中的三个系统表,可以得到每个表的每个字段的默认值。下面是核心查询。它返回分配给当前数据库中每个用户表的默认值。该查询在SQL 2000和SQL 2005中都兼容。
选择如此。名称为“表名”,SC。名称为“列名”,SM。来自dbo . sys objects SO INNER JOIN dbo . sys columns SC ON SO . id = SC . id
JOIN dbo . sys comments 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条件语句,我们可以查看所有表中的特殊默认值。
选择如此。名称为“表名”,SC。名称为“列名”,SM。TEXT AS " Default Value "
FROM dbo . sys objects SO INNER JOIN dbo . sys columns SC ON SO . id = SC . id
LEFT JOIN dbo . sys comments SM ON SC . cdefault = SM . id
其中SO.xtype = 'U '和SM。TEXT = '(0)'
ORDER BY SO。[name],SC.colid
选项2:仅返回带有默认字段的信息
修改核心查询的WHERE条件语句,以忽略syscomments.text表中的空值。这个技巧如下:
选择so.name作为“表名”,SC。名称为“列名”,SM。TEXT AS " Default Value "
FROM dbo . sys objects SO INNER JOIN dbo . sys columns SC ON SO . id = SC . id
LEFT JOIN dbo . sys comments SM ON SC . cdefault = SM . id
其中SO.xtype = 'U '和SM。文本不为空
ORDER BY SO。[name],SC.colid
但是,将FROM条件子句中的联接从左联接改为内联接将提供优化:
Select so.name作为“表名”,sc.name作为“列名”,SM。来自dbo . sys objects SO INNER JOIN dbo . sys columns SC ON SO . id = SC . id
INNER JOIN dbo . sys comments sm ON SC . cdefault = sm . id
where SO . xtype = ' u '
order by SO。[name],sc.colid
其实还有一个选项,使用SQL 2005中的系统目录视图。前面的查询为我提供了此时需要的信息,它可以在SQL2000和SQL 2005中使用。在SQL 2000的实例中,可以挖掘与这个缺省值(实际上是一个缺省约束)相关联的附加元数据。通过在系统编目视图中指定这个查询,我们可以获得在前面的查询中没有显示的附加信息。
选择ST.[name]作为“表名”,SC。[name]为“列名”,SD.definition为“默认值”,SD。[name]作为ST.[object_id] = SC上sys.tables ST内部联接sys.syscolumns SC中的“约束名称”
。[id]
内部联接系统。st. [object _ id] = sd上的Default _ constraints SD。[父对象标识]和sc。colid = sd。parent _ column _ id
order by ST .[name],sccolid
被告知没有更好的办法。你永远不知道你会得到什么。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 列出SQLServer中具有默认值的所有字段

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情