Sql-Server
根據與同一表中另一列的不同值在列上創建唯一約束
我想讓一個列唯一,但它必須基於與表中另一列的不同值是唯一的。
考慮下表:
CREATE TABLE locations( locationId INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, locationName VARCHAR(50) NOT NULL, companyId INT NOT NULL FOREIGN KEY REFERENCES companies (companyId) );
我的目標是讓位置名稱對於 companyId 列中的每個值都是唯一的。
例如,給定下表:
[locationId] [locationName] [companyId] ===================================================================== 1 'Example A.' 1 2 'Example B.' 1 3 'Example A.' 2 4 'Example C.' 2
如果我嘗試執行以下查詢:
INSERT INTO locations (locationName, companyId) VALUES ('Example B.', 2)
這不會給我一個唯一約束錯誤,因為位置表中沒有行的 locationName 為“範例 B.”且 companyId 為 2
但是,執行這樣的查詢應該會產生唯一約束錯誤:
INSERT INTO locations (locationName, companyId) VALUES ('Example C.', 2)
因為位置名稱為“範例 C”的行。並且 companyId 2 已經存在。
我試過查詢
CREATE UNIQUE INDEX [UNQ_locationName_companyId] ON dbo.[locations]([locationName]) WHERE ([companyId] IS DISTINCT);
但是 IS DISTINCT 不是有效的 SQL 語法,但我想不出正確的方法來實現這一點。
任何幫助將不勝感激!
似乎應該這樣做:
CREATE UNIQUE INDEX [UNQ_locationName_companyId] ON dbo.[locations]([locationName],[companyId]);