"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 고유 한 제약 조건 및 트리거를 사용하여 중복 데이터베이스 레코드를 방지하려면 어떻게해야합니까?

고유 한 제약 조건 및 트리거를 사용하여 중복 데이터베이스 레코드를 방지하려면 어떻게해야합니까?

2025-02-26에 게시되었습니다
검색:167

How Can I Prevent Duplicate Database Records Using Unique Constraints and Triggers?

중복 레코드를 방지하기 위해 고유 한 제약 조건을 사용합니다

]

데이터베이스 작업에서는 종종 특정 열 조합의 독창성을 보장해야합니다. 예를 들어 다음 표를 고려하십시오.

ID | Name | Active | PersonNumber

기존 테이블에 고유 한 제약 조건을 추가

]]] 기존 테이블에 고유 한 제약 조건을 추가하려면 다음 방법 중 하나를 사용할 수 있습니다.

1

ALTER TABLE DBO.YOURTABLENAME 제약 조건 UQ_Yourtablename 고유 한 (column1, column2);

ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
고유 인덱스 UQ_Yourtablename을 만듭니다 on dbo.yourtablename (column1, column2);

트리거를 사용하여 반복 삽입을 방지
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);

트리거 dbo.blockduplicatesyourtable을 만듭니다 dbo.yourtable에서 삽입 대신 처럼 시작하다 Nocount를 설정하십시오. 존재하지 않는 경우 ( 선택 1 i로 삽입되었습니다 내부 가입 dbo.yourtable은 t i.column1 = T.column1 및 i.column2 = T.column2 )) 시작하다 dbo.yourtable 삽입 (column1, column2, ...) 삽입 된 Column1, Column2, ...에서 선택하십시오. 끝 또 다른 시작하다 인쇄 '작업이 수행되지 않았습니다. '; - 더 친근한 프롬프트 정보 끝 끝; 가다

예 : 개인의 독창성을 구현하고 능동적으로
CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (
    SELECT 1
    FROM inserted AS i
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '未执行任何操作。'; -- 更友好的提示信息
  END
END;
GO

tempdb 사용; 가다 테이블 dbo.person을 만듭니다 ( ID INT ID (1,1) 기본 키, 이름 nvarchar (32), 활성 비트, 인원 int ); 가다 ALTER TABLE DBO.PERSON 제약 조건 UQ_Person 고유 (Personnumber, Active); 가다

이제 고유 한 제약 조건을 위반하는 삽입 시도는 오류 메시지와 함께 실패하여 동일한 사람과 활성 상태가있는 중복 레코드가 없도록합니다.

print '행동이 수행되지 않았습니다. '
USE tempdb;
GO

CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);
GO

ALTER TABLE dbo.Person 
  ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);
GO
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3