복붙노트

[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. ==============================

    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. ==============================

    2.

    ALTER TABLE [TableName] REBUILD WITH (IGNORE_DUP_KEY = ON)
    
  3. ==============================

    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. ==============================

    4.개인적으로는 중복을 무시하고 싶지 않았다. 기본 키에 중복 값이 ​​있으면 수정해야합니다. 나는 그것을 무시하고 사용자가 모두 삽입되었다고 판단 수 있기 때문에 다른 레코드를 삽입하지 않습니다. 이 설정은 잘못된 삽입 과정의 커버 업입니다. 이 (upsert 기존의 갱신과 새로운 삽입 또는 사용)에 그것을 입력하기 전에 데이터를 정리하고 고정하고 다시 삽입 할 수 있도록 테이블에 나쁜 기록을 보내거나 오류를 전송으로 잘 설계된 프로세스는이 설정이 필요하지 않습니다 사용자에게 다시, 그들은 그래서 그들은 자신의 기록이 삽입되지 않은 것을 알고있다.

    개인적으로는 중복을 무시하고 싶지 않았다. 기본 키에 중복 값이 ​​있으면 수정해야합니다. 나는 그것을 무시하고 사용자가 모두 삽입되었다고 판단 수 있기 때문에 다른 레코드를 삽입하지 않습니다. 이 설정은 잘못된 삽입 과정의 커버 업입니다. 이 (upsert 기존의 갱신과 새로운 삽입 또는 사용)에 그것을 입력하기 전에 데이터를 정리하고 고정하고 다시 삽입 할 수 있도록 테이블에 나쁜 기록을 보내거나 오류를 전송으로 잘 설계된 프로세스는이 설정이 필요하지 않습니다 사용자에게 다시, 그들은 그래서 그들은 자신의 기록이 삽입되지 않은 것을 알고있다.

  5. ==============================

    5.참고이 설정은 당신이 중복 키를 삽입 할 경우 발생하는 영향을, 당신이 중복 키를 삽입 할 수 없습니다.

    참고이 설정은 당신이 중복 키를 삽입 할 경우 발생하는 영향을, 당신이 중복 키를 삽입 할 수 없습니다.

    중복 키를 삽입하려고 시도하는 경우 다음 인덱스를 다시 작성, 기록을 삽입 기본 키 인덱스를 드롭 데이터 (제거 중복 등)을 고칠 수 있습니다.

  6. ==============================

    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/

  7. from https://stackoverflow.com/questions/2594193/can-i-set-ignore-dup-key-on-for-a-primary-key by cc-by-sa and MIT license