2011-08-16 55 views
1

我想使用SQL Server 2008創建數據庫。我有我的sql查詢來創建它。 但每次我想執行它時,都會收到以下錯誤消息: 「在此上下文中不允許使用子查詢,只允許使用標量表達式。」SQL Server 2008:在此上下文中不允許使用子查詢。只允許標量表達式

這是查詢的一部分,其中的問題是:

alter table PRODUIT add constraint ID_PRODUIT_CHK 
    check(exists(select * from PRODUCTION 
        where PRODUCTION.IdProduit = IdProduit)); 

也有一些是錯誤的「檢查」,但我不知道是什麼。 你能幫我嗎?

+6

從你所顯示的內容不清楚爲什麼FOREIGN KEY約束不是更好的解決方案。 –

回答

4

檢查約束只允許對該行中列的值作出斷言。不允許在同一個表中引用其他行,更不用說其他表。

有一些可能的解決方法 - 正如我在我的評論中所說的,它看起來像你試圖創建一個外鍵約束。有些函數也可能起作用(通過將邏輯放置在用戶定義的函數中),但這些函數通常會存在邊界情況,在最初的插入/更新過程中該檢查將起作用,但稍後可能會被違反。

我們需要更清楚地瞭解您的問題以提出可行的解決方案。你想要達到什麼目的?如果它是而不是是外鍵約束,那麼外鍵約束的哪些功能在您的情況下不起作用?

+0

+1:檢查約束確實支持用戶定義的函數,但我同意提供的示例應該是一個外鍵約束。 –

+1

@OMG Ponies - 我不相信允許你對其他表/行進行斷言時,明確地考慮允許UDF被CHECK約束調用 - 這更像是一個「開心」意外,比如「TOP 100 PERCENT」和「訂單」在2005年以前的觀點。如果他們真的想支持這樣的功能,我希望他們添加ANSI標準'ASSERTION'。 –

相關問題