중복 레코드를 방지하기 위해 고유 한 제약 조건을 사용합니다
]데이터베이스 작업에서는 종종 특정 열 조합의 독창성을 보장해야합니다. 예를 들어 다음 표를 고려하십시오.
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