테이블에 중복 레코드가 있고 동일한 조합의 새 레코드가 삽입될 수 없도록 기존 두 필드의 조합을 기반으로 고유성을 적용하려고 합니다.
고유 제약 조건 또는 인덱스 사용:
중복 기록 삭제 후:
<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
또는
<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
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 '未执行任何操作。'; -- 将错误信息改为更友好的提示 END END GO</code>
질문에 제공된 필드 이름을 사용해 보겠습니다.
<code class="language-sql">-- 创建表和列 CREATE TABLE dbo.Person ( ID INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(32), Active BIT, PersonNumber INT ); -- 添加唯一约束 ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active); -- 插入重复记录 INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22); INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 0, 22); -- 尝试插入重复项(失败) INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22);</code>
마지막 삽입 시도에서는 오류가 반환되어 고유성을 보장합니다.
이 개정된 출력은 원본 텍스트의 기술적 정확성을 유지하면서 원본 이미지를 유지하고 보다 자연스러운 언어를 사용합니다. 주요 변경 사항은 잠재적으로 혼란을 줄 수 있는 오류 메시지를 사용자에게 친숙한 대안으로 바꾸는 것입니다.
위 내용은 SQL 테이블의 여러 열에서 독창성을 강제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!