¿No se puede truncar la tabla porque hace referencia a ella una restricción de CLAVE EXTRANJERA?

Resuelto ctrlShiftBryan asked hace 16 años • 31 respuestas

Usando MSSQL2005, ¿puedo truncar una tabla con una restricción de clave externa si primero trunco ​​la tabla secundaria (la tabla con la clave principal de la relación FK)?

Sé que yo también puedo

  • Utilice una DELETEcláusula sin dónde y luego RESEEDla identidad (o)
  • Elimine la FK, trunque la tabla y vuelva a crear la FK.

Pensé que mientras truncara la tabla secundaria antes que la principal, estaría bien sin hacer ninguna de las opciones anteriores, pero aparece este error:

No se puede truncar la tabla 'TableName' porque una restricción FOREIGN KEY hace referencia a ella.

ctrlShiftBryan avatar Oct 31 '08 22:10 ctrlShiftBryan
Aceptado
DELETE FROM TABLENAME
DBCC CHECKIDENT ('DATABASENAME.dbo.TABLENAME', RESEED, 0)

Tenga en cuenta que probablemente esto no sea lo que desearía si tiene millones de registros, ya que es muy lento.

s15199d avatar Aug 02 '2012 20:08 s15199d

Correcto; no se puede truncar una tabla que tenga una restricción FK.

Normalmente mi proceso para esto es:

  1. Deja las restricciones
  2. Trunca la mesa
  3. Recrea las restricciones.

(Todo en una transacción, por supuesto).

Por supuesto, esto sólo se aplica si el niño ya ha sido truncado. De lo contrario, tomo una ruta diferente, dependiendo completamente de cómo se ven mis datos. (Demasiadas variables para entrar aquí).

El cartel original determinó POR QUÉ es así; vea esta respuesta para más detalles.

John Rudy avatar Oct 31 '2008 15:10 John Rudy