2012-09-22 34 views
0

如何查詢數據庫中所有類型的約束,例如主鍵,外鍵,唯一鍵和默認約束,並將其系統生成名稱重命名爲以下格式的名稱:用用戶定義的名稱重命名所有約束名稱

  • PK_ColumnName1_ColumnName2
  • FK_ColumnName1
  • UK_ColumnName1_ColumnName2
  • DF_ColumnName1
+1

您應該知道約束名稱在整個模式中必須是唯一的。如果可能有兩個表具有由名稱相同的列組成的主鍵,則您提議的方案將中斷。我建議在約束名稱中也包含表名。 –

回答

1
SELECT tbl.name TableName, col.name ColName, ck.name ConstraintName, ck.definition ConstraintDefinition ,' exec sp_rename [' +ck.name + '] , [DF_' + col.name + ']' SqlQuery 
FROM sys.default_constraints ck 
INNER JOIN sys.tables tbl 
on ck.parent_object_id = tbl.object_id 
INNER JOIN sys.columns col 
on tbl.object_id = col.object_id 
and ck.parent_column_id = col.column_id 

這是默認的約束

使用sys.key_constraints ANS sys.foreign_keys

0

下面的代碼是一個小更詳細,太具體的是默認的約束。

select  quotename(s.name) + '.' + quotename(o.name) as table_name, 
     dc.name as default_name, 
     'DF_' + o.name + '_' + c.name as new_default_name, 
     'execute sp_rename ''' + quotename(s.name) + '.' + dc.name + ''', ''' + 'DF_' + o.name + '_' + c.name + ''' , ''OBJECT'' -- ' + s.name + '.' + o.name + '' as rename_script 
from  sys.default_constraints as dc 
join  sys.objects as o 
    join  sys.schemas as s 
    on   o.schema_id = s.schema_id 
on   o.object_id = dc.parent_object_id 
join  sys.columns as c 
on   o.object_id = c.object_id 
and   c.column_id = dc.parent_column_id 
where  dc.name like 'DF[_][_]%[_][_]%[_][_]%' -- DF__AlertType__Creat__10F7245D 
and   o.type = 'u' 
and   o.is_ms_shipped = 0 
order by s.name, 
      o.name