0

値が別のSQLクエリによって与えられた結果セット内にある列の1つにチェック制約を持つテーブルを作成することは可能ですか?

例えば。

create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)

またはそのようなもの。

どこでも使用する必要はありませんが、それでも知りたいです。

4

2 に答える 2

2

外部キー参照で目的を達成できない場合は、関数呼び出しで SELECT ステートメントをラップすれば可能です。

チェック制約式は次のようになります。

(dbo.SomeFunction([col1]) != 0)

関数は次のようになります (列が varchar であると仮定します)。

create function dbo.SomeFunction(@arg varchar(max))
returns bit
as
begin
return
(
    select count(*) from SomeOthertable where col2 = @arg
)
end

編集 (2010/06/9):count(*) Anthony のコメントに関して、私のテストでは、1 より大きい値が 1 として返されることが示されました。そのため、おそらく明示的に 1 または 0 を返す必要がありますが、関数は問題ないように見えます。または、実際の行数に関心がある場合は、戻り値の型を BIT から INT に変更します。

于 2010-06-08T10:30:27.117 に答える
1

はい: 同じデータベース リンクの外部キー

create table tablename
(
name varchar(10),
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll)
)

別のデータベースの場合は、ストアド プロシージャを介して挿入するか、トリガーを介して強制するなどのコードを使用します。

于 2010-06-08T10:29:25.200 に答える