sql >> Base de Datos >  >> RDS >> Sqlserver

No se puede truncar la tabla porque está siendo referenciada por una restricción FOREIGN KEY - Tutorial de SQL Server/TSQL Parte 70

Escenario:

Necesita truncar una tabla, pero cuando intenta ejecutar la tabla truncada tableName. Obtiene el siguiente error.

Mensaje 4712, nivel 16, estado 1, línea 43
No se puede truncar la tabla 'SchemaName.TableName' porque una restricción FOREIGN KEY hace referencia a ella.

¿Cómo truncarías esta tabla?

Solución:

Como la tabla está involucrada en la relación de clave externa, primero debe eliminar la restricción de clave externa y luego ejecutar la instrucción de tabla truncada.

Hagamos una demostración de este ejemplo, voy a crear dos tablas dbo.Customer y dbo.Orders y luego cree una restricción de clave externa en una de las columnas de Dbo.Orders a la tabla 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)
 
 
 Ahora, si trato de truncar la tabla dbo.Orders, no arrojará ningún error. Pero cuando trato de truncar la tabla dbo.Customer, arrojará un error ya que dbo.Customer comienza las referencias por la restricción de clave externa.

Cómo truncar una tabla a la que hace referencia la restricción de clave externa en SQL Server

Podemos eliminar la restricción por ahora, truncar la tabla y luego volver a crear la restricción de clave externa.

Para encontrar las restricciones de clave externa en una tabla, puede usar la siguiente declaración.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Cómo obtener el nombre de restricción de las tablas del sistema en SQL Server
 
 La siguiente secuencia de comandos se puede usar para generar una declaración de restricción de caída para su tabla

 
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') 
 
 
Cómo eliminar la restricción de clave externa en la tabla en SQL Server
 Tome el resultado de Eliminar restricción de clave externa y ejecútelo. Después de eso, ejecute su instrucción de tabla truncada para truncar la tabla. Debería completarse sin ningún error.


Demostración en video:No se puede truncar la tabla porque está siendo referenciada por una restricción FOREIGN KEY