有没有一种方法可以编写一个脚本,检查数据库中的每个表,查找名为
ID
的uniqueidentifier
列,并在该列上添加DEFAULT
约束为NEWID()
,如果不存在DEFAULT
约束的话?ID
的uniqueidentifier
列,并在该列上添加DEFAULT
约束为NEWID()
,如果不存在DEFAULT
约束的话?uniqueidentifier
列上创建一个DEFAULT
约束,其值为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