2011-08-16 24 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 - あなたが他のテーブルや行に対してアサーションを行うことを許可すると、CHECK制約によってUDFを呼び出すことを明示的に考えられていたとは思えません - "TOP 100 PERCENT" 「ORDER BY」は2005年前の見解であった。彼らが実際にそのような機能をサポートしたいのであれば、ANSI標準の 'ASSERTION'を追加すると思います。 –

関連する問題