복붙노트

[SQL] SQL 서버 2008 : INSERT하지 존재하는 경우는, 고유의 열을 유지

SQL

SQL 서버 2008 : INSERT하지 존재하는 경우는, 고유의 열을 유지

나는 SQL Server 2008을 사용하고 있습니다.

나는 독특한 확실하게하려는 테이블의 열 NVARCHAR (MAX)를 가지고있다. 표는 60 만 개 기록을 가지고 있으며, 5 만 개 기록에 의해 매일 성장한다.

현재 테이블에 항목을 추가하기 전에 나는 그것이 삽입이 테이블에 존재하는지 확인하지 않을 경우 I.

IF NOT EXISTS (SELECT * FROM Softs Where Title = 'example example example.')
BEGIN
INSERT INTO Softs (....)
VALUES (...)
END

나는 제목 열에서 인덱스가없는

최근에, 나는 테이블에 항목을 삽입 할 때 시간 제한을 받기 시작했다.

유니크을 유지하는 올바른 방법이 있을까요?

정말 내가 NVARCHAR에 NVARCHAR (MAX)를 변경할 수 있습니다 (450) 도움이 될 경우

해결법

  1. ==============================

    1.그것은의 광기는 인덱스를하지.

    그것은의 광기는 인덱스를하지.

    그것은 도움이 될하지만 인덱스 키 길이는 900 바이트가 될 수 있습니다.

    두번째의 가능성이 1 일하지만 1 삽입하기 전에 EXISTS 후에 실행하기 위해 존재하기 때문에, 그것은 가능성이 이미 중복이 있어요.

    인덱스 생성은 당신에게, 이후이 방지됩니다.

    그러나, 당신은 부하 오류를 얻을 수 있습니다.

    높은 삽입 / 낮은 중복에 대한 나의 선호하는 방법은 JFDI 패턴입니다. 높은 동시

    BEGIN TRY
       INSERT etc
    END TRY
    BEGIN CATCH
        IF ERROR_NUMBER() <> 2627
          RAISERROR etc
    END CATCH
    
  2. from https://stackoverflow.com/questions/3695863/sql-server-2008-insert-if-not-exits-maintain-unique-column by cc-by-sa and MIT license