Cenário:
Você precisa truncar uma tabela, mas quando tenta executar truncate table tableName. Você recebe o erro abaixo.Msg 4712, Level 16, State 1, Line 43
Não é possível truncar a tabela 'SchemaName.TableName' porque ela está sendo referenciada por uma restrição FOREIGN KEY.
Como você truncaria esta tabela?
Solução:
Como a tabela está envolvida no relacionamento de chave estrangeira, você precisa primeiro eliminar a restrição de chave estrangeira e depois executar a instrução truncate table.Vamos demonstrar este exemplo, vou criar duas tabelas dbo.Customer e dbo.Orders e, em seguida, crie uma restrição de chave estrangeira em uma das colunas de Dbo.Orders para a tabela dbo.Customer.
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) ) CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT, CustomerId int ) --Create Foreign Key Constraint Alter table dbo.Orders with Nocheck Add Constraint Fk_CustomerId Foreign Key(CustomerId) References dbo.Customer(CustomerId)Agora, se eu tentar truncar a tabela dbo.Orders, não haverá erro. Mas quando tento truncar a tabela dbo.Customer, ele gera um erro, pois dbo.Customer é começar referências por restrição de chave estrangeira.
Como truncar uma tabela que é referência por restrição de chave estrangeira no SQL Server |
Podemos descartar a restrição por enquanto, truncar a tabela e, em seguida, recriar a restrição de chave estrangeira.
Para encontrar as restrições de chave estrangeira em uma tabela, você pode usar a instrução abaixo.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
Como obter o nome da restrição das tabelas do sistema no SQL Server |
SELECT 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +'.[' + OBJECT_NAME(parent_object_id) +'] DROP CONSTRAINT ' + name as DropFKConstraint FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
Como eliminar a restrição de chave estrangeira na tabela no SQL Server |
Demonstração de vídeo:não é possível truncar a tabela porque ela está sendo referenciada por uma restrição FOREIGN KEY