如何在MS SQL中重命名FK

Mik*_*rov 3 sql-server

尝试使用重命名MS SQL中的密钥

sp_rename 'FK_Catalog_Equipment__Equiements_Catalog_Client_Clients','FK_Catalog_Equipment__Equipments_Catalog_Client_Clients','OBJECT'
Run Code Online (Sandbox Code Playgroud)

要么

sp_rename 'Table_Name.FK_Catalog_Equipment__Equiements_Catalog_Client_Clients','FK_Catalog_Equipment__Equipments_Catalog_Client_Clients','OBJECT'
Run Code Online (Sandbox Code Playgroud)

但这两个命令都会导致

Msg 15248, Level 11, State 1, Procedure sp_rename, Line 359
Either the parameter @objname is ambiguous or the claimed @objtype (OBJECT) is wrong.
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Pan*_*vos 11

外键约束是单个对象,这就是为什么你不能拥有与其他对象同名的FK.因此,它们的名称与架构相关.

sp_rename的文档示例复制:

sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';  
Run Code Online (Sandbox Code Playgroud)

将重命名FK_Employee_Person_BusinessEntityIDHumanResources架构中找到FK_EmployeeID

如果缺少架构,SQL Server将在用户的默认架构中查找对象,该架构通常是dbo架构.如果在其他模式中创建FK,则需要明确指定它

  • 如果外键的名称包含“.”,则此操作不起作用。您必须将键名括在括号中,例如:`exec sp_rename '[FK_A.BC]', 'ABCD', 'OBJECT';` (4认同)
  • 在这种情况下,我收到消息:"在当前数据库'DBName'中找不到名为'FK _...'的项目,因为@itemtype输入为'(null)'."也试过`sp_rename 'TableName.FK_Name','New_FK_Name','OBJECT';`但是在这种情况下有类似我的问题描述中的消息:`参数@objname是不明确的,或者声称的@objtype(OBJECT)是错误的. (3认同)
  • 名称应包括架构,而不是表. (3认同)
  • 主键和索引应使用 TableName.PK_Name。外键应使用 Schema.FK_Name (2认同)

MAN*_*ARY 6

尝试这个

 exec sp_rename '<SchemaName>.FK_Catalog_Equipment__Equiements_Catalog_Client_Clients',
 'FK_Catalog_Equipment__Equipments_Catalog_Client_Clients', 'object'
Run Code Online (Sandbox Code Playgroud)

欲了解更多详情,请点击此处

否则删除约束,然后重命名,然后重新添加约束是一种简单的方法。但成本是巨大的,因为创建新约束必须验证现有数据。

    ALTER TABLE <TableName>
        DROP FOREIGN KEY 'FK_Catalog_Equipment__Equiements_Catalog_Client_Clients',
        ADD CONSTRAINT `FK_Catalog_Equipment__Equipments_Catalog_Client_Clients` 
FOREIGN KEY (`<tag_id>`) REFERENCES `tags` (`<id>`);
Run Code Online (Sandbox Code Playgroud)

  • 无需“删除”对象只是为了重命名它 (2认同)