2009-12-24 10 views

Respuesta

8

restricciones e índices pasará a llamarse de forma automática, pero usted tendrá que manualmente no cambiar el nombre de trabajo en los procedimientos almacenados, triggers, funciones definidas por el usuario, y vistas que hacen referencia la mesa. Ver the documentation on MSDN.

+0

Muchas gracias por salvarme una mañana de trabajo innecesario :-) – EvilDr

7

No, el cambio de nombre de la tabla también habrá actualizado los metadatos correspondientes en los catálogos del sistema y, por lo tanto, la restricción seguirá haciendo referencia a la tabla correcta.

Puede utilizar la siguiente secuencia de comandos para identificar todas las claves foráneas para validar su cambio si lo desea.

SELECT PKTABLE_QUALIFIER = CONVERT(SYSNAME,DB_NAME()), 
     PKTABLE_OWNER = CONVERT(SYSNAME,SCHEMA_NAME(O1.SCHEMA_ID)), 
     PKTABLE_NAME = CONVERT(SYSNAME,O1.NAME), 
     PKCOLUMN_NAME = CONVERT(SYSNAME,C1.NAME), 
     FKTABLE_QUALIFIER = CONVERT(SYSNAME,DB_NAME()), 
     FKTABLE_OWNER = CONVERT(SYSNAME,SCHEMA_NAME(O2.SCHEMA_ID)), 
     FKTABLE_NAME = CONVERT(SYSNAME,O2.NAME), 
     FKCOLUMN_NAME = CONVERT(SYSNAME,C2.NAME), 
     -- Force the column to be non-nullable (see SQL BU 325751) 
     --KEY_SEQ    = isnull(convert(smallint,k.constraint_column_id), sysconv(smallint,0)), 
     UPDATE_RULE = CONVERT(SMALLINT,CASE OBJECTPROPERTY(F.OBJECT_ID,'CnstIsUpdateCascade') 
             WHEN 1 THEN 0 
             ELSE 1 
             END), 
     DELETE_RULE = CONVERT(SMALLINT,CASE OBJECTPROPERTY(F.OBJECT_ID,'CnstIsDeleteCascade') 
             WHEN 1 THEN 0 
             ELSE 1 
             END), 
     FK_NAME = CONVERT(SYSNAME,OBJECT_NAME(F.OBJECT_ID)), 
     PK_NAME = CONVERT(SYSNAME,I.NAME), 
     DEFERRABILITY = CONVERT(SMALLINT,7) -- SQL_NOT_DEFERRABLE 
FROM SYS.ALL_OBJECTS O1, 
     SYS.ALL_OBJECTS O2, 
     SYS.ALL_COLUMNS C1, 
     SYS.ALL_COLUMNS C2, 
     SYS.FOREIGN_KEYS F 
     INNER JOIN SYS.FOREIGN_KEY_COLUMNS K 
     ON (K.CONSTRAINT_OBJECT_ID = F.OBJECT_ID) 
     INNER JOIN SYS.INDEXES I 
     ON (F.REFERENCED_OBJECT_ID = I.OBJECT_ID 
      AND F.KEY_INDEX_ID = I.INDEX_ID) 
WHERE O1.OBJECT_ID = F.REFERENCED_OBJECT_ID 
     AND O2.OBJECT_ID = F.PARENT_OBJECT_ID 
     AND C1.OBJECT_ID = F.REFERENCED_OBJECT_ID 
     AND C2.OBJECT_ID = F.PARENT_OBJECT_ID 
     AND C1.COLUMN_ID = K.REFERENCED_COLUMN_ID 
     AND C2.COLUMN_ID = K.PARENT_COLUMN_ID 

Este script se obtienen de: Identify all of your foreign keys in a SQL Server database

+0

Eso es realmente osum stuff dude.Gracias –

+0

De nada, me alegro de ayudar. –

+0

[aquí] (http://stackoverflow.com/questions/8094156/know-relationships-between-all-the-tables-of-database-in-sql-server) es ** otro script **, la esperanza ayuda a alguien . – stom

Cuestiones relacionadas