2016-09-21 7 views
0

Versuch Foring Schlüssel in MS SQL umbenennenWie FK in MS SQL

sp_rename 'FK_Catalog_Equipment__Equiements_Catalog_Client_Clients','FK_Catalog_Equipment__Equipments_Catalog_Client_Clients','OBJECT' 

oder

sp_rename 'Table_Name.FK_Catalog_Equipment__Equiements_Catalog_Client_Clients','FK_Catalog_Equipment__Equipments_Catalog_Client_Clients','OBJECT' 

aber beide Befehle führen mit umbenennen in

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

Was ich falsch gemacht ?

+0

Sie müssen den Parameter '@ objtype' nicht übergeben –

+0

Wird der FK im 'dbo'-Schema oder einem anderen Schema erstellt? –

+0

Sie haben Recht. Hinzufügen des Schemanamens vor dem FK-Namen löste das Problem. Aber in diesem Fall gibt es eine andere Frage: warum diese Variante nicht funktioniert? 'sp_rename 'Catalog.Table.FK_Name', 'New_Name', 'Object';' –

Antwort

2

dieses Weitere Details Versuchen

exec sp_rename '<SchemaName>.FK_Catalog_Equipment__Equiements_Catalog_Client_Clients', 
'FK_Catalog_Equipment__Equipments_Catalog_Client_Clients', 'object' 

click here

Andernfalls die Einschränkung Dropping, dann umbenennen, fügen Sie dann die Einschränkung wieder eine einfache Möglichkeit ist. Die Kosten sind jedoch enorm, da das Erstellen der neuen Einschränkung die vorhandenen Daten validieren muss.

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>`); 
+1

Keine Notwendigkeit, * ein Objekt * fallen zu lassen, nur um es umzubenennen –

+0

Ich bin nicht bewusst, dass Umbenennen funktioniert oder nicht. Aber so können wir die Antwort –

+1

erreichen Nur weil das Endergebnis das gleiche ist, bedeutet das nicht, dass dies eine gute Lösung ist. Die Kosten sind jedoch enorm, da das Erstellen der neuen Einschränkung die vorhandenen Daten validieren muss. –

3

Fremdschlüsseleinschränkungen sind einzelne Objekte, weshalb Sie keine FK mit demselben Namen wie andere Objekte haben können. Daher ist ihr Name für das Schema relevant.

Kopieren von sp_rename's documentation Beispiel:

sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID'; 

FK_Employee_Person_BusinessEntityID im HumanResources Schema FK_EmployeeID

gefunden umbenannt wird Wenn das Schema fehlt, sucht SQL Server für Objekte im Standardschema des Benutzers, die oft das dbo Schema. Wenn der FK in einem anderen Schema erstellt wird, müssen Sie ihn explizit angeben

+1

In diesem Fall erhalte ich die Nachricht: 'Kein Element mit dem Namen 'FK _...' konnte in der aktuellen Datenbank 'DBName' gefunden werden, da @itemtype als '(null)' eingegeben wurde. ' Auch versucht 'sp_rename 'TableName.FK_Name', 'New_FK_Name', 'OBJECT';' aber in diesem Fall haben Sie die Nachricht wie in meiner Frage Beschreibung: 'Entweder der Parameter @objname ist mehrdeutig oder der beanspruchte @objtype (OBJECT) ist falsch. –

+1

Der Name sollte das Schema, nicht die Tabelle enthalten. –