Como remover a restrição de chave estrangeira no servidor sql?

quero remover a chave estrangeira de outra tabela para poder inserir valores da minha escolha.

sou novo em bases de dados, por isso, por favor, diga-me a pesquisa SQL correcta para largar ou remover o valor da chave estrangeira.

Author: jgauffin, 2012-09-19

11 answers

Tente seguir

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME>

Ver: http://www.w3schools.com/sql/sql_foreignkey.asp

 110
Author: Prasanna, 2012-09-19 06:52:57

É errado fazer isso em referência a integridade referencial , porque uma vez quebrado não é fácil ligá-lo de novo sem ter que passar pelos registos e apagar os que quebram as restrições.

De qualquer forma a sintaxe é a seguinte:

ALTER TABLE Tablename DROP CONSTRAINT ContName;

Ver MSDN:

 11
Author: CloudyMarble, 2013-04-16 10:43:09

Para remover todas as restrições do DB:

SELECT 'ALTER TABLE ' + Table_Name  +' DROP CONSTRAINT ' + Constraint_Name
FROM Information_Schema.CONSTRAINT_TABLE_USAGE
 4
Author: Sakthivel Murugesan, 2016-03-11 15:38:27
ALTER TABLE [TableName] DROP CONSTRAINT [CONSTRAINT_NAME]
Mas, tenha cuidado, homem, uma vez que você faça isso, você pode nunca ter uma chance de volta, e você deve ler um livro de banco de dados básico para ver por que precisamos de chave estrangeira
 4
Author: Simon Wang, 2016-06-02 00:13:59

Dependendo do DB Você está a usar há uma sintaxe ou outra.

Se estiver a utilizar Oracle tem de colocar o que os outros utilizadores lhe disseram:

ALTER TABLE table_name DROP CONSTRAINT fk_name;

Mas se usar o MySQL Então Isto dar-lhe-á um erro de sintaxe, em vez disso poderá escrever:

ALTER TABLE table_name DROP INDEX fk_name;
 2
Author: Guim Gonzalez, 2017-10-22 11:16:25
ALTER TABLE table
DROP FOREIGN KEY fk_key

Editar: não reparei que estavas a usar o servidor sql, erro meu

ALTER TABLE table
DROP CONSTRAINT fk_key
 1
Author: mokuril, 2012-09-19 06:51:21

Largue todas as chaves estrangeiras de uma tabela:

USE [Database_Name]
DECLARE @FOREIGN_KEY_NAME VARCHAR(100)

DECLARE FOREIGN_KEY_CURSOR CURSOR FOR
SELECT name FOREIGN_KEY_NAME FROM sys.foreign_keys WHERE parent_object_id = (SELECT object_id FROM sys.objects WHERE name = 'Table_Name' AND TYPE = 'U')

OPEN FOREIGN_KEY_CURSOR
----------------------------------------------------------
FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME
WHILE @@FETCH_STATUS = 0
    BEGIN
       DECLARE @DROP_COMMAND NVARCHAR(150) = 'ALTER TABLE Table_Name DROP CONSTRAINT' + ' ' + @FOREIGN_KEY_NAME

       EXECUTE Sp_executesql @DROP_COMMAND

       FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME

    END
-----------------------------------------------------------------------------------------------------------------
CLOSE FOREIGN_KEY_CURSOR
DEALLOCATE FOREIGN_KEY_CURSOR
 1
Author: Ashraf, 2018-01-11 14:55:00

Use essas consultas para encontrar todos os FKs:

Declare @SchemaName VarChar(200) = 'Schema Name'
Declare @TableName VarChar(200) = 'Table name'

-- Find FK in This table.
SELECT 
    'IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' + 
      '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']' 
      + ''') AND parent_object_id = OBJECT_ID(N''' + 
      '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' 
      + OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' +

    'ALTER TABLE ' +  OBJECT_SCHEMA_NAME(FK.parent_object_id) +
    '.[' + OBJECT_NAME(FK.parent_object_id) + 
    '] DROP CONSTRAINT ' + FK.name
    , S.name , O.name, OBJECT_NAME(FK.parent_object_id)
FROM sys.foreign_keys AS FK
INNER JOIN Sys.objects As O 
  ON (O.object_id = FK.parent_object_id )
INNER JOIN SYS.schemas AS S 
  ON (O.schema_id = S.schema_id)  
WHERE 
      O.name = @TableName
      And S.name = @SchemaName


-- Find the FKs in the tables in which this table is used
  SELECT 
    ' IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' + 
      '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']' 
      + ''') AND parent_object_id = OBJECT_ID(N''' + 
      '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' 
      + OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' +

    ' ALTER TABLE ' +  OBJECT_SCHEMA_NAME(FK.parent_object_id) +
    '.[' + OBJECT_NAME(FK.parent_object_id) + 
    '] DROP CONSTRAINT ' + FK.name
    , S.name , O.name, OBJECT_NAME(FK.parent_object_id)
FROM sys.foreign_keys AS FK
INNER JOIN Sys.objects As O 
  ON (O.object_id = FK.referenced_object_id )
INNER JOIN SYS.schemas AS S 
  ON (O.schema_id = S.schema_id)  
WHERE 
      O.name = @TableName
      And S.name = @SchemaName 
 0
Author: Ardalan Shahgholi, 2015-10-29 23:37:53

Deve considerar (temporariamente) desactivar a restrição antes de a apagar completamente.

Se você olhar para a criação da tabela TSQL você vai ver algo como:

ALTER TABLE [dbo].[dbAccounting] CHECK CONSTRAINT [FK_some_FK_constraint]

Podes correr

ALTER TABLE [dbo].[dbAccounting] NOCHECK CONSTRAINT [FK_some_FK_constraint]

... em seguida, inserir/atualizar um monte de valores que violam a restrição, e, em seguida, voltar a ligá-lo, executando a instrução original CHECK.

Tive de fazer isto para limpar sistemas mal concebidos que herdei no passado.)
 0
Author: feetwet, 2016-02-07 17:30:45

Em alternativa, também pode apagar uma restrição de chave estrangeira do próprio estúdio de gestão de servidores SQL. pode tentar se os comandos não funcionarem .

  1. expande a vista da base de dados.
  2. carregue com o botão direito na tabela que tem restrição de chave estrangeira. Escolha O Design. Irá abrir uma página com a informação acerca das colunas da tabela.
  3. carregue com o botão direito na coluna que tem a referência da chave estrangeira. Ou pode clicar com o botão direito em qualquer coluna. Escolhe As Relações.
  4. A uma lista de relações aparecerá (se você tiver uma) em uma janela pop up.
  5. de lá você pode apagar a restrição de chave estrangeira.
Espero que isso ajude.
 0
Author: alchi baucha, 2017-01-13 00:24:29
alter table <referenced_table_name> drop  primary key;

A restrição de chave estrangeira será removida.

 -3
Author: user6882476, 2016-09-26 20:22:43