我有表包含ISDEFAULT柱:指數強制執行位列每桌一個TRUE值
CREATE TABLE CustomerType
(
ID int IDENTITY(1,1) NOT NULL,
Name nvarchar(50) NOT NULL,
IsDefault bit NOT NULL
)
的ISDEFAULT值應,自然是TRUE
對於只有一行,所有其他行應該是FALSE
。我想在數據庫級別強制執行此規則。
目前,我通過它加入了新的計算列,並放置一個唯一的非聚集索引實現這一目標:
CREATE TABLE CustomerType
(
ID int IDENTITY(1,1) NOT NULL,
Name nvarchar(50) NULL,
IsDefault bit NOT NULL
IsDefaultConstraint AS (CASE WHEN IsDefault = 1 THEN 1 ELSE -ID END),
)
CREATE UNIQUE NONCLUSTERED INDEX UQ_CustomerType_IsDefault ON CustomerType
(
IsDefaultConstraint ASC
)
這只是正常的,但有一點代碼味道的吧,因爲額外的列沒有按」 t包含相關數據,僅用於實施唯一索引。
是否有其他方法來強制執行相同的行爲?
你有沒有試過在Oracle論壇上找到答案?我寧願使用基於紙張的數據庫,而不願意靠近Oracle,因爲從https://communities.oracle.com/ –
Oracle論壇獲得任何幫助簡直太糟糕了。我總是使用stackoverflow.com :-) –
SQL Server只有5年的篩選索引。對於這個問題,可以使用索引視圖來模擬篩選索引,這些視圖至少在2000年版本的產品中已經出現。 –