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.
- Expand your database view.
- Right Click on Table which has foreign key constraint. Choose Design. A tab with the information about table columns will open.
- Right click on the column which has the foreign key reference. Or you can right click on any column. Choose Relationships.
- A list of relationships will appear (if you have one) in a pop up window.
- 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
'development' 카테고리의 다른 글
두 배열의 공통점 찾기 (0) | 2020.11.23 |
---|---|
Android 앱의 모양과 느낌을 어떻게 개선 할 수 있습니까? (0) | 2020.11.23 |
jquery를 사용하여 스크롤 위치 가져 오기 (0) | 2020.11.23 |
div의 내용을 백분율로 조정 하시겠습니까? (0) | 2020.11.23 |
Python에서 파일 해싱 (0) | 2020.11.23 |