【问题标题】:Set/Change Default value for all tables (same column name/type)设置/更改所有表的默认值(相同的列名/类型)
【发布时间】:2013-12-11 22:01:15
【问题描述】:

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

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

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

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

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

感谢阅读。 克雷格

【问题讨论】:

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


    【解决方案1】:

    这将显示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
    

    【讨论】:

    • 谢谢朋友。这有很大帮助。我发现了错误的条目(例如单括号)。唯一的问题是忽略空白条目。你能提供任何关于找到这些的建议吗?
    • @PieEyed “空白条目”是什么意思?你的意思是NULL 值,还是空字符串'' 或其他?
    猜你喜欢
    • 2018-03-28
    • 2021-06-07
    • 2019-08-17
    • 2016-12-28
    • 2011-04-14
    • 2019-11-04
    • 2017-06-26
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多