sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 CHECK 制約が UPDATE または DELETE ステートメントで起動しない

    この方法で更新時にチェックを強制できます。
    このようなテーブルがあるとしましょう

    create table UserTest(Id int, IsEnabled bit, [GroupId] int)
    

    ここで、[GroupId] によって 1 人のユーザーのみが有効になっていることを確認します。 .

    通常、制約は次のようになります

    ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId)=1)
    

    この制約は、GroupId を更新するまで、更新されたレコードに対してトリガーされません .
    したがって、次のようにして、強制的に IsEnabled 列を検証する必要があります

    ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId, IsEnabled )=1)
    

    関数に IsEnabled 値を使用するかどうかは関係ありません。




    1. Javaでオブジェクトパラメータを使用してPL SQL関数を呼び出す

    2. 無効な日時形式:1292不正な日時値

    3. MySQLのUSINGに相当するSQLServer

    4. エラー:(124、9)エラー:メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません