値が別のSQLクエリによって与えられた結果セット内にある列の1つにチェック制約を持つテーブルを作成することは可能ですか?
例えば。
create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)
またはそのようなもの。
どこでも使用する必要はありませんが、それでも知りたいです。
値が別のSQLクエリによって与えられた結果セット内にある列の1つにチェック制約を持つテーブルを作成することは可能ですか?
例えば。
create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)
またはそのようなもの。
どこでも使用する必要はありませんが、それでも知りたいです。
外部キー参照で目的を達成できない場合は、関数呼び出しで 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 に変更します。
はい: 同じデータベース リンクの外部キー
create table tablename
(
name varchar(10),
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll)
)
別のデータベースの場合は、ストアド プロシージャを介して挿入するか、トリガーを介して強制するなどのコードを使用します。