有没有办法编写一个脚本来检查数据库中的每个表,寻找uniqueidentifier
列名为ID
,然后添加一个DEFAULT
的约束NEWID()
到列,如果DEFAULT
约束不存在?
根据OP的评论澄清进行编辑
该脚本创建一个DEFAULT
的约束NEWID()
on any uniqueidentifier
列名为ID
还没有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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)