development

SQL Server에서 외래 키 제약 조건을 제거하는 방법은 무엇입니까?

big-blog 2020. 11. 23. 19:36
반응형

SQL Server에서 외래 키 제약 조건을 제거하는 방법은 무엇입니까?


원하는 값을 삽입 할 수 있도록 다른 테이블에서 외래 키를 제거하고 싶습니다.

나는 데이터베이스가 처음이므로 외래 키 값을 삭제하거나 제거하기 위해 올바른 SQL 쿼리를 알려주십시오.


다음 시도

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME>

참조 : http://www.w3schools.com/sql/sql_foreignkey.asp


참조 무결성 과 관련 하여 그렇게하는 것은 잘못된 것입니다. 일단 깨지면 레코드를 살펴보고 제약 조건을 깨는 레코드를 삭제하지 않고 다시 켜는 것이 쉽지 않기 때문입니다.

어쨌든 구문은 다음과 같습니다.

ALTER TABLE Tablename DROP CONSTRAINT ContName;

MSDN 참조 :


DB에서 모든 제약 조건을 제거하려면 :

SELECT 'ALTER TABLE ' + Table_Name  +' DROP CONSTRAINT ' + Constraint_Name
FROM Information_Schema.CONSTRAINT_TABLE_USAGE

ALTER TABLE [TableName] DROP CONSTRAINT [CONSTRAINT_NAME]

하지만 조심하세요. 일단 그렇게하면 다시 기회를 얻지 못할 수도 있습니다. 기본적인 데이터베이스 책을 읽어야합니다. 왜 외래 키가 필요한지 알아보세요.


사용하는 DB 에 따라 구문 또는 다른 것이 있습니다.

Oracle사용 하는 경우 다른 사용자가 말한 내용을 입력해야합니다.

ALTER TABLE table_name DROP CONSTRAINT fk_name;

그러나 MySQL사용 하면 구문 오류가 발생하고 대신 다음을 입력 할 수 있습니다.

ALTER TABLE table_name DROP INDEX fk_name;

ALTER TABLE table
DROP FOREIGN KEY fk_key

편집 : 당신이 sql-server를 사용하고 있다는 것을 알지 못했습니다.

ALTER TABLE table
DROP CONSTRAINT fk_key

제약 조건을 완전히 삭제하기 전에 (일시적으로) 비활성화하는 것을 고려해야합니다.

테이블 생성 TSQL을 보면 다음과 같은 내용이 표시됩니다.

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

당신은 실행할 수 있습니다

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

... 그런 다음 제약 조건을 위반하는 값을 삽입 / 업데이트 한 다음 원래 CHECK을 실행하여 다시 켭니다 .

(과거에 물려받은 잘못 설계된 시스템을 정리하기 위해이 작업을 수행해야했습니다.)


테이블의 모든 외래 키를 삭제합니다.

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

이러한 쿼리를 사용하여 모든 FK를 찾습니다.

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 

Alternatively, you can also delete a Foreign Key Constraint from the SQL Server Management Studio itself. You can try it if the commands do not work.

  1. Expand your database view.
  2. Right Click on Table which has foreign key constraint. Choose Design. A tab with the information about table columns will open.
  3. Right click on the column which has the foreign key reference. Or you can right click on any column. Choose Relationships.
  4. A list of relationships will appear (if you have one) in a pop up window.
  5. From there you can delete the foreign key constraint.

I hope that helps


alter table <referenced_table_name> drop  primary key;

Foreign key constraint will be removed.

참고URL : https://stackoverflow.com/questions/12489762/how-to-remove-foreign-key-constraint-in-sql-server

반응형