2012-03-26 11 views
0

SQL Anywhere 9.0でいくつかのチェック制約を定式化しようとしています。Sybase Check制約評価

は基本的に私はこのようなスキーマを持っている:私は、テーブルの中で最も数になるように、各制限の制約my_numberを強制しようとしている

CREATE TABLE limits (
    id INT IDENTITY PRIMARY KEY, 
    count INT NOT NULL 
); 

CREATE TABLE sum (
    user INT, 
    limit INT, 
    my_number INT NOT NULL CHECK(my_number > 0), 
    PRIMARY KEY (user, limit) 
); 

私は

CHECK ((SELECT sum(my_number) FROM sum WHERE limit = limit) <= (SELECT count FROM limits WHERE id = limit)) 

CHECK (((SELECT sum(my_number) FROM sum WHERE limit = limit) + my_number) <= (SELECT count FROM limits WHERE id = limit)) 

を試みたし、彼らの両方が正しい事をしないように見えます。これらのサブクエリはいずれもオフになっています(つまり、負の数値を取得すると、挿入は失敗しますが、その前には無効になります)。

テーブルが挿入された後に一貫性があるかどうかチェックし、無効の場合はロールバックしますか?

答えて

0

ここでは、このヘルプトピックに基づいて何を実行しようとしているのか分かりません。

Using CHECK constraints on columns

CHECK条件が設定されると、将来の値は行が変更される前の状態に対して と評価されます。

私は前に挿入トリガーに行きます。より多くのオプションがあり、より良いエラーメッセージを表示することができます。