2011-09-03 17 views
13

Actualmente estoy creando nuevas tablas en mi base de datos de SQL Server. Estoy renombrando las tablas antiguas, por lo que también las restricciones de clave externa.¿Cómo cambiar el nombre de la clave externa?

Para utilizar Adventureworks DB como ejemplo, la tabla SalesOrderDetail tiene FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId (que enlaza con la tabla SalesOrderHeader).

¿Está cambiando el nombre de esta clave externa es suficiente o también necesito cambiar la referencia de la clave externa en la tabla SalesOrderHeader?

Respuesta

16

Simplemente el nombre: no cambiará la relación de ninguna manera.

EXEC sp_rename 'Sales.FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId', 
       'new_name', 
       'OBJECT'; 

NB: Esta clave externa en AdventureWorks está en el esquema Sales lo que el argumento es object_name esquema cualificada en el llamado procedimiento anterior.

1
SELECT Object_name(constraint_object_id), 
     Object_name(parent_object_id), 
     (SELECT name 
     FROM sys.columns 
     WHERE object_id = parent_object_id 
       AND column_id = parent_column_id), 
     Object_name(referenced_object_id), 
     (SELECT name 
     FROM sys.columns 
     WHERE object_id = referenced_object_id 
       AND column_id = referenced_column_id), 
     'sp_rename ''' + Object_name(constraint_object_id) + ''', ''con_fk_' + (SELECT Lower(name) 
                       FROM sys.columns 
                       WHERE object_id = parent_object_id 
                         AND column_id = parent_column_id) + ''',''OBJECT''' 
FROM sys.foreign_key_columns 
Cuestiones relacionadas