post icon

Cannot truncate table ‘dbo.TableName’ because it is being referenced by a FOREIGN KEY constraint.

Impossibile troncare una tabella quando vi è un vincolo di integrità referenziale

Spesso vi sarà capitato di ottenere il seguente messaggio di errore in SQL Server 2005 / 2008

Cannot truncate table ‘dbo.TableName’ because it is being referenced by a FOREIGN KEY constraint.

nel momento in cui avete tentato di eseguire una TRUNCATE TABLE.
Come si evince dal messaggio di errore il problema è dato dal fatto che la tabella sulla quale si sta cercando di effettuare una TRUNCATE contiene vincoli di integrità referenziale con altre tabelle.

L’unica soluzione per poter effettuare la TRUNCATE è:

  1. Effettuare la DROP delle CONSTRAINTS
  2. Effettuare la TRUNCATE
  3. Ricreare le CONSTRAINTS

possibilmente tutto in transazione.

Ecco uno snippet di esempio:

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT

BEGIN TRANSACTION
GO

ALTER TABLE dbo.ChildTable
    DROP CONSTRAINT FK_ChildTable_ParentTable
GO

TRUNCATE TABLE dbo.ChildTable
GO

ALTER TABLE dbo.ChildTable ADD CONSTRAINT
    FK_ChildTable_ParentTable FOREIGN KEY
    (
    IdParentOnChild
    ) REFERENCES dbo.ParentTable
    (
    IdParent
    ) ON UPDATE  NO ACTION
     ON DELETE  NO ACTION 

GO

COMMIT
25 maggio 2010 @ 08:50

No comments yet.

Leave a comment

Leave a Reply

Are you human? Time limit is exhausted. Please reload CAPTCHA.