设置/更改所有表的默认值(相同列名/类型)

时间:2013-11-26 16:26:10

标签: sql sql-server-2008-r2 default-value

我有很多数据库,跨越不同的服务器,都包含几十个表,共有一个列。 注意 - 所有数据库都在SQL Server 2008 R2上运行。

我需要检查(并在必要时更改)名为“tblFAC%”的每个表中的值。 该列名为“SOURCE”,值应为“((0))”

这些是系统生成的列,这就是为什么它们都是必需的和(通常)统一的原因。

我发现很偶然,我会看到奇怪的错误条目 - 通常是{blank}或'(0)' - 唯一的解决方法是使用DESIGN打开每个数据库中的每个表查看然后选择“SOURCE”字段并检查默认值,并根据需要进行修改。

因此,我想知道是否有任何类型的脚本检查数据库中名为'tblFAC%'的所有表的'SOURCE'字段的默认值,并将它们设置为'((0))'不管情况如何。

感谢阅读。 克雷格

1 个答案:

答案 0 :(得分:0)

这将显示SOURCE的默认约束未设置为((0))的所有架构/表:

SELECT  s.name AS schema_
      , t.name AS table_
      , OBJECT_DEFINITION(default_object_id) AS default_value
FROM    sys.columns c
JOIN    sys.tables t
   ON c.object_id = t.object_id
JOIN    sys.schemas s
   ON t.schema_id = s.schema_id
JOIN    sys.default_constraints d
   ON c.default_object_id = d.object_id
WHERE t.name LIKE 'tblFAC%'
   AND c.name = 'SOURCE'
   AND OBJECT_DEFINITION(default_object_id) <> '((0))'

您可以使用上面的内容构建一个alter语句,我认为您必须将其设置为在每台服务器上运行,不确定是否可以查询跨服务器sys表。

更新,红利问题: 没有时间对此进行测试,但要查找未设置约束的位置,您应该只能将其更改为LEFT JOIN并检查NULL

SELECT  s.name AS schema_
      , t.name AS table_
      , OBJECT_DEFINITION(default_object_id) AS default_value
FROM    sys.columns c
JOIN    sys.tables t
   ON c.object_id = t.object_id
JOIN    sys.schemas s
   ON t.schema_id = s.schema_id
LEFT JOIN    sys.default_constraints d
   ON c.default_object_id = d.object_id
WHERE t.name LIKE 'tblFAC%'
   AND c.name = 'SOURCE'
   AND OBJECT_DEFINITION(default_object_id) IS NULL