[SQL] 나는 IGNORE_DUP_KEY는 기본 키에 설정할 수 있습니까?
SQL나는 IGNORE_DUP_KEY는 기본 키에 설정할 수 있습니까?
나는 테이블에 두 개의 열이 기본 키를 가지고있다. 나는이 명령에에 IGNORE_DUP_KEY를 설정을 변경하려고했습니다 :
ALTER INDEX PK_mypk on MyTable
SET (IGNORE_DUP_KEY = ON);
그러나 나는이 오류가 발생합니다 :
이 기본 또는 고유 제한 조건을 강제로 ALTER INDEX 'PK_mypk'에 인덱스 옵션 IGNORE_DUP_KEY를 사용할 수 없습니다.
어떻게 다른 난에에 IGNORE_DUP_KEY를 설정해야합니까?
해결법
-
==============================
1.그것은 온라인 설명서 아니지만, 나는이 기본 키에 유효한 동안, 당신은 ALTER INDEX로 변경할 수 없음을 발견했습니다, 당신은 삭제하고 기본 키를 다시 작성해야합니다.
그것은 온라인 설명서 아니지만, 나는이 기본 키에 유효한 동안, 당신은 ALTER INDEX로 변경할 수 없음을 발견했습니다, 당신은 삭제하고 기본 키를 다시 작성해야합니다.
이 플래그는 당신이 실제로 중복 행을 저장하는 것을 허용하지 않는다는 것을 명심 단순히 결과 그 오류를 변경합니다
ON A warning message will occur when duplicate key values are inserted into a unique index. Only the rows violating the uniqueness constraint will fail. OFF An error message will occur when duplicate key values are inserted into a unique index. The entire INSERT operation will be rolled back.
http://msdn.microsoft.com/en-us/library/ms175132.aspx에서
-
==============================
2.
ALTER TABLE [TableName] REBUILD WITH (IGNORE_DUP_KEY = ON)
-
==============================
3.그것은 당신이 단지 중복을 삽입 할 때 발생하는 결정
그것은 당신이 단지 중복을 삽입 할 때 발생하는 결정
ALTER TABLE..index 옵션을 참조하십시오
.. 그리고는 PK와 적용되지 않습니다
이것에 대해 ALTER 표하고 "이전 버전과의 호환성"에 대한 BOL의 의견은 다소 혼란. 난 그냥 그것을 시도하고 BradC 올바른 것입니다.
CREATE TABLE dbo.foo (bar int PRIMARY KEY WITH (FILLFACTOR=90, IGNORE_DUP_KEY = ON)) GO INSERT dbo.foo VALUES (1) GO INSERT dbo.foo VALUES (1) GO --gives (1 row(s) affected) Duplicate key was ignored. (0 row(s) affected)
-
==============================
4.개인적으로는 중복을 무시하고 싶지 않았다. 기본 키에 중복 값이 있으면 수정해야합니다. 나는 그것을 무시하고 사용자가 모두 삽입되었다고 판단 수 있기 때문에 다른 레코드를 삽입하지 않습니다. 이 설정은 잘못된 삽입 과정의 커버 업입니다. 이 (upsert 기존의 갱신과 새로운 삽입 또는 사용)에 그것을 입력하기 전에 데이터를 정리하고 고정하고 다시 삽입 할 수 있도록 테이블에 나쁜 기록을 보내거나 오류를 전송으로 잘 설계된 프로세스는이 설정이 필요하지 않습니다 사용자에게 다시, 그들은 그래서 그들은 자신의 기록이 삽입되지 않은 것을 알고있다.
개인적으로는 중복을 무시하고 싶지 않았다. 기본 키에 중복 값이 있으면 수정해야합니다. 나는 그것을 무시하고 사용자가 모두 삽입되었다고 판단 수 있기 때문에 다른 레코드를 삽입하지 않습니다. 이 설정은 잘못된 삽입 과정의 커버 업입니다. 이 (upsert 기존의 갱신과 새로운 삽입 또는 사용)에 그것을 입력하기 전에 데이터를 정리하고 고정하고 다시 삽입 할 수 있도록 테이블에 나쁜 기록을 보내거나 오류를 전송으로 잘 설계된 프로세스는이 설정이 필요하지 않습니다 사용자에게 다시, 그들은 그래서 그들은 자신의 기록이 삽입되지 않은 것을 알고있다.
-
==============================
5.참고이 설정은 당신이 중복 키를 삽입 할 경우 발생하는 영향을, 당신이 중복 키를 삽입 할 수 없습니다.
참고이 설정은 당신이 중복 키를 삽입 할 경우 발생하는 영향을, 당신이 중복 키를 삽입 할 수 없습니다.
중복 키를 삽입하려고 시도하는 경우 다음 인덱스를 다시 작성, 기록을 삽입 기본 키 인덱스를 드롭 데이터 (제거 중복 등)을 고칠 수 있습니다.
-
==============================
6.약동학를 삭제 한 후 다시 작성
약동학를 삭제 한 후 다시 작성
ALTER TABLE TableName DROP CONSTRAINT PK_TableName GO ALTER TABLE TableName ADD CONSTRAINT PK_TableName PRIMARY KEY CLUSTERED ( MyIDColumn ASC ) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] GO
SEE -> https://eitanblumin.com/2018/10/28/the-ignore_dup_key-option-in-primary-keys-and-unique-indexes/
from https://stackoverflow.com/questions/2594193/can-i-set-ignore-dup-key-on-for-a-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 2005 SQL - 열은 여러 번 지정 (0) | 2020.05.13 |
---|---|
[SQL] SQL Server의 IsInteger위한 최고의 상응 (0) | 2020.05.13 |
[SQL] 합니까 UNION ALL 결과 집합의 순서를 보장 [중복] (0) | 2020.05.13 |
[SQL] SQL 서버 업데이트 그룹에 의해 (0) | 2020.05.13 |
[SQL] MySQL의에서 외래 키 열 이름 바꾸기 (0) | 2020.05.13 |