SQL Server 열 조합 고유성 제약 조건 확인
데이터베이스 테이블에는 동일한 열 값을 가진 여러 레코드가 있을 수 있습니다. 이를 방지하려면 특정 열 조합이 테이블 내에서 고유해야 하는 고유 제약 조건을 적용할 수 있습니다.
예를 들어 테이블에는 다음 열이 포함되어 있습니다.
PersonNumber와 Active = 1의 고유한 조합이 있는 레코드가 하나만 있는지 확인하는 데 필요합니다.
고유 제약조건 생성
테이블에서 중복 레코드를 제거한 후 ALTER TABLE
문이나 CREATE UNIQUE INDEX
문을 사용하여 고유 제약 조건을 추가할 수 있습니다.
ALTER TABLE
방법<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
CREATE UNIQUE INDEX
방법<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
중복 삽입 처리
예외를 반환하여 SQL Server가 중복 삽입을 처리하도록 하는 대신 잠재적인 충돌을 사전에 확인할 수 있습니다.
예외로 인해 애플리케이션이 중단되는 것을 방지하려면 다음 방법을 사용할 수 있습니다.
애플리케이션을 수정하지 않고 중복 삽입을 처리하려면 INSTEAD OF 트리거를 생성할 수 있습니다.
<code class="language-sql">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 'Did nothing.'; -- 或执行其他处理重复插入的逻辑 END END GO</code>
예
다음 예에서는 열 조합에 고유 제약 조건을 생성하고 해당 기능을 확인하는 방법을 보여줍니다.
<code class="language-sql">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 -- 成功: INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22); GO -- 成功: INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 0, 22); GO -- 失败: INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22); GO</code>
이 예는 고유성 제약 조건이 동일한 PersonNumber 및 Active=1 조합을 사용하여 중복 레코드를 방지하는 방법을 보여줍니다.
위 내용은 SQL Server의 열 조합에서 고유 한 제약 조건을 시행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!