Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Não é possível truncar a tabela porque ela está sendo referenciada por uma restrição FOREIGN KEY - Tutorial SQL Server / TSQL Parte 70

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
 
 O script abaixo pode ser usado para gerar a instrução drop Constraint para sua tabela

 
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
 Pegue o resultado para Drop Foreign Key Constraint e execute, depois disso, execute sua instrução truncate table para truncate table. Ele deve ser concluído sem nenhum erro.


Demonstração de vídeo:não é possível truncar a tabela porque ela está sendo referenciada por uma restrição FOREIGN KEY