【问题标题】:SQL Server - Add default constraints to all tablesSQL Server - 向所有表添加默认约束
【发布时间】:2010-12-19 03:04:11
【问题描述】:

有没有办法编写一个脚本来检查数据库中的每个表,查找名为IDuniqueidentifier 列,然后如果@987654325 将NEWID()DEFAULT 约束添加到列中@约束不存在?

【问题讨论】:

  • 是的。还有更具体的吗??
  • 使用 T-SQL 还是 SMO/DMO?对于特定值或只是查找类型为 uniqueidentifier 的列类型?

标签: sql-server tsql sql-server-2008-r2


【解决方案1】:

根据 OP 的注释说明进行编辑

此脚本在任何名为 ID 且尚无 DEFAULT 约束的 uniqueidentifier 列上创建 NEWID()DEFAULT 约束。

SET NOCOUNT ON

DECLARE @tableVarId int
DECLARE @alterSql   nvarchar(MAX)

DECLARE @columnsNeedingDefault TABLE
(
  TableVarId    int IDENTITY (1,1) PRIMARY KEY,
  AlterSql      nvarchar(MAX)
)

INSERT INTO @columnsNeedingDefault (AlterSql)
SELECT
  'ALTER TABLE ' + QUOTENAME(a_Table.[name]) +
  ' ADD CONSTRAINT [DF_' + a_Table.[name] + '_' + a_Column.name +
  '] DEFAULT NEWID() FOR ' + QUOTENAME(a_Column.name)
FROM
  sys.columns AS a_Column
INNER JOIN
  sys.tables AS a_Table ON a_Column.[object_id] = a_Table.[object_id]
WHERE
  a_Column.[name] = 'ID'
  AND
  a_Column.user_type_id = 36 -- uniqueidentifier
  AND
  NOT EXISTS
  (
    SELECT
      *
    FROM
      sys.default_constraints AS a_DefaultConstraint
    WHERE   a_DefaultConstraint.parent_object_id = a_Table.[object_id]
      AND   a_DefaultConstraint.parent_column_id = a_Column.column_id
      AND   a_DefaultConstraint.type_desc = 'DEFAULT_CONSTRAINT'
  )

SET @tableVarId = (SELECT MIN(TableVarId) FROM @columnsNeedingDefault)
WHILE @tableVarId IS NOT NULL
  BEGIN
    SELECT @alterSql = AlterSql FROM @columnsNeedingDefault

    PRINT @alterSql
    EXEC sp_executesql @alterSql

    SET @tableVarId = (SELECT MIN(TableVarId) FROM @columnsNeedingDefault
                       WHERE TableVarId > @tableVarId)
  END

【讨论】:

  • 好的,这很好,但我实际上是在寻找一种方法来检测数据库中的每个表是否都有一个“ID”字段,如果是,则更改它并添加一个约束。 .. 如下所示... [ADD CONSTRAINT DF_DonorStatus DEFAULT newid() FOR ID] 抱歉,不记得“代码”括号设置。
猜你喜欢
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多