Published on

April 2, 2014

Como remover e recriar restrições de chave estrangeira no SQL Server

As restrições de chave estrangeira são uma parte essencial para manter a integridade dos dados em um banco de dados SQL Server. Elas garantem que os relacionamentos entre tabelas sejam aplicados e evitam registros órfãos. No entanto, pode haver cenários em que você precise remover e recriar essas restrições. Neste artigo, discutiremos como realizar essa tarefa.

Uma abordagem para remover e recriar restrições de chave estrangeira é usando tabelas temporárias e um script. O especialista em SQL, Swastik Mishra, forneceu um script fantástico que alcança esse objetivo de forma eficaz. Vamos dar uma olhada no script:

SET NOCOUNT ON
DECLARE @table TABLE(
RowId INT PRIMARY KEY IDENTITY(1, 1),
ForeignKeyConstraintName NVARCHAR(200),
ForeignKeyConstraintTableSchema NVARCHAR(200),
ForeignKeyConstraintTableName NVARCHAR(200),
ForeignKeyConstraintColumnName NVARCHAR(200),
PrimaryKeyConstraintName NVARCHAR(200),
PrimaryKeyConstraintTableSchema NVARCHAR(200),
PrimaryKeyConstraintTableName NVARCHAR(200),
PrimaryKeyConstraintColumnName NVARCHAR(200)
)
INSERT INTO @table(ForeignKeyConstraintName, ForeignKeyConstraintTableSchema, ForeignKeyConstraintTableName, ForeignKeyConstraintColumnName)
SELECT
U.CONSTRAINT_NAME,
U.TABLE_SCHEMA,
U.TABLE_NAME,
U.COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE U
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
ON U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE
C.CONSTRAINT_TYPE = 'FOREIGN KEY'
UPDATE @table SET
PrimaryKeyConstraintName = UNIQUE_CONSTRAINT_NAME
FROM
@table T
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R
ON T.ForeignKeyConstraintName = R.CONSTRAINT_NAME
UPDATE @table SET
PrimaryKeyConstraintTableSchema = TABLE_SCHEMA,
PrimaryKeyConstraintTableName = TABLE_NAME
FROM @table T
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
ON T.PrimaryKeyConstraintName = C.CONSTRAINT_NAME
UPDATE @table SET
PrimaryKeyConstraintColumnName = COLUMN_NAME
FROM @table T
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U
ON T.PrimaryKeyConstraintName = U.CONSTRAINT_NAME
--SELECT * FROM @table
--DROP CONSTRAINT:
SELECT
'
ALTER TABLE [' + ForeignKeyConstraintTableSchema + '].[' + ForeignKeyConstraintTableName + ']
DROP CONSTRAINT ' + ForeignKeyConstraintName + '
GO'
FROM
@table
--ADD CONSTRAINT:
SELECT
'
ALTER TABLE [' + ForeignKeyConstraintTableSchema + '].[' + ForeignKeyConstraintTableName + ']
ADD CONSTRAINT ' + ForeignKeyConstraintName + ' FOREIGN KEY(' + ForeignKeyConstraintColumnName + ') REFERENCES [' + PrimaryKeyConstraintTableSchema + '].[' + PrimaryKeyConstraintTableName + '](' + PrimaryKeyConstraintColumnName + ')
GO'
FROM
@table
GO

Este script utiliza tabelas temporárias para selecionar as restrições de chave estrangeira existentes e seus respectivos nomes de coluna e tabela. Em seguida, determina os nomes da tabela e coluna da chave primária e usa essas informações para remover e recriar as restrições.

Ao executar as instruções “DROP CONSTRAINT”, você pode remover as restrições de chave estrangeira das tabelas especificadas. Da mesma forma, as instruções “ADD CONSTRAINT” permitem recriar as restrições com as referências apropriadas.

Gostaríamos de agradecer a Swastik Mishra por fornecer este excelente script. Se você encontrar este script útil em sua rotina diária, entre em contato conosco por e-mail. Teremos prazer em apresentar sua contribuição em nosso blog e recompensá-lo com um vale-presente da Amazon no valor de USD 20 ou um vale-presente da Flipkart no valor de INR 1000.

Obrigado por ler este artigo sobre como remover e recriar restrições de chave estrangeira no SQL Server. Esperamos que você encontre essas informações úteis para gerenciar seu banco de dados de forma eficaz.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.