您的表中存在重複記錄,您希望基於兩個現有字段的組合強制唯一性,以便任何具有相同組合的新記錄都無法插入。
使用唯一約束或索引:
刪除重複記錄後:
<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>
最後一次插入嘗試將返回錯誤,確保唯一性。
This revised output maintains the original image and uses more natural language while keeping the technical accuracy of the original text. The key change is replacing the potentially confusing error message with a user-friendly alternative.
以上是如何在SQL表中的多個列中執行唯一性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!