Lle*_*ryd 0 foreign-key sql-server primary-key ssms sql-server-2008-r2
我正在处理一些在某些时候重命名的表/列,但主键/外键的名称仍然基于以前的名称。
在 SSMS 中,是否有任何(最好是自动的)方法可以将密钥的名称重置为新创建的默认名称?
没有办法自动执行此操作,但您可以查询目录视图以查找不在所需模式中的约束名称,然后以这种方式生成所需的脚本。
就像是
DECLARE @Script NVARCHAR(MAX);
WITH FK
AS (SELECT *,
'FK_' + OBJECT_NAME(parent_object_id) + '_' + OBJECT_NAME(referenced_object_id) AS provisionalName,
ROW_NUMBER() OVER (PARTITION BY parent_object_id, referenced_object_id ORDER BY create_date) - 1 AS RN
FROM sys.foreign_keys),
Combined
AS (SELECT name COLLATE DATABASE_DEFAULT AS name,
OBJECT_SCHEMA_NAME(parent_object_id) AS schemaName,
provisionalName + CASE
WHEN RN = 0 THEN ''
ELSE CAST(RN AS VARCHAR)
END AS provisionalName
FROM FK
UNION ALL
SELECT name,
OBJECT_SCHEMA_NAME(parent_object_id) AS schemaName,
type + '_' + OBJECT_NAME(parent_object_id) AS provisionalName
FROM sys.key_constraints)
SELECT @Script = x.rename.value('.', 'NVARCHAR(MAX)')
FROM (SELECT 'exec sys.sp_rename ''' + QUOTENAME(schemaName) + '.' + QUOTENAME(name) + ''', ''' + provisionalName + ''';
'
FROM Combined
WHERE provisionalName <> name
FOR XML PATH(''), TYPE) x(rename);
PRINT @Script;
--EXEC (@Script);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56 次 |
最近记录: |