2010-11-18 103 views
1

位值,假設我有一個表,這樣約束在TSQL

[StockBarcodeID] [uniqueidentifier] NOT NULL, 
[UserID] [uniqueidentifier] NOT NULL, 
[StockID] [uniqueidentifier] NOT NULL, 
[UnitPrice] [money] NOT NULL, 
[Barcode] [varchar](16) NOT NULL, 
[IsDefault] [bit] NOT NULL, 
[LastUpdated] [datetime] NOT NULL, 

一個如何去創造一個限制,允許每stockid只有1個默認條碼行?

我似乎無法擺脫這個問題。這是一個唯一的約束或檢查約束?

+0

可能重複的[T-SQL唯一約束WHERE AnotherColumn = ParticularValue](http://stackoverflow.com/questions/4097484/t-sql-unique-constraint-where-anothercolumn-particularvalue)(還有在這個問題上的進一步鏈接到其他*類似的問題) – 2010-11-18 07:15:49

+0

可能的重複[約束只有一個記錄被標記爲默認值。](http://stackoverflow.com/questions/637894/constraint-for-only-一個記錄標記爲默認) – InSane 2010-11-18 07:21:54

+0

我很抱歉,因爲看起來你是正確的,這是其他問題的重複。問題是每個人都有自己的方式來表達問題,因此重複着...如果你想關閉,請隨意。再次抱歉 :-) – 2010-11-19 04:23:16

回答

1

創建一個只顯示默認條形碼的視圖。然後在這個視圖上創建一個唯一索引。

CREATE VIEW dbo.DefaultBarcode 
WITH SCHEMABINDING 
AS 
    SELECT StockID, Barcode 
    FROM dbo.Barcode 
    WHERE IsDefault = 1 
GO 
CREATE UNIQUE CLUSTERED INDEX UC_DefaultBarcode ON dbo.DefaultBarcode (StockID) 
GO