2011-12-05 63 views
2

我想在我的數據庫表上執行一個業務規則,以確保如果表中已經包含滿足特定條件的行,就不能插入一行。SQL SERVER檢查約束 - 查詢其他行

想要使用CHECK約束,但懷疑這可能需要通過觸發器完成。

有沒有辦法通過CHECK約束來做到這一點?或者還有另一種方法可以在數據庫級別執行此操作,而無需使用觸發器?

+0

請提供的一個例子** **具體什麼你正在嘗試做的。總是最好嘗試以聲明的方式來做這件事。 –

+0

您可以更具體地瞭解您正在測試的標準嗎? –

+0

如果在某個範圍內有一列ID列的現有行,我不想插入一行 – AJM

回答

2

根據您的具體標準(你還沒有共享),你可以做一個unique filtered index.

這通常是比功能或其他解決方法更快。

一般格式是:

CREATE UNIQUE NONCLUSTERED INDEX ix_IndexName ON MyTable (FieldstoIndex) 
WHERE <filter to only include certain rows> 
+0

謝謝。我認爲這將滿足我的需求。我有一個用戶ID和一個狀態ID,並且要確保具有特定狀態ID的用戶只能有一行。 – AJM

+0

CREATE UNIQUE NONCLUSTERED INDEX ix_IndexName ON MyTable(UserId,StatusId)WHERE StatusId = X – AJM

+0

@AJM then yes對你而言。 – JNK