0

既存のテーブルに追加する次のチェック制約があります。

 ALTER TABLE  [dbo].[PROCESS_UPLOADDATA] 
ADD CONSTRAINT [PROCESS_RequireKeyFileOnMODE_Constraint] 
CHECK (
(RTRIM(LTRIM(LOWER(UPLOAD_MODE))) ='sftp' 
AND DATALENGTH(KEYFILE_PATH) > 2) 
)

UPLOAD_MODE 列は、NULL を許可しない列であり、ftp や sftp などの値を持ちます。KEYFILE_PATH 列は、IS NULL デフォルト設定の NVARCHAR(400) 列です。ただし、UPLOAD_MODE の値が 'sftp' に設定されている場合は、キーファイル パスも指定する必要があります。

ALTER TABLE ステートメントが CHECK 制約 "PROCESS_RequireKeyFileOnMODE_Constraint" と競合しました。データベース「FILECONTROL」、テーブル「dbo.PROCESS_UPLOADDATA」で競合が発生しました。

ただし、実行すると、次のエラー メッセージが表示されます。これについて何か助けていただければ幸いです。SQL サーバー データベース ! 前もって感謝します。

//UPDATED SQL CHECK 


     ALTER TABLE  [dbo].[PROCESS_UPLOADDATA] 
    ADD CONSTRAINT [PROCESS_RequireKeyFileOnMODE_Constraint] 
    CHECK (
    CASE 
                     WHEN (RTRIM(LTRIM(LOWER(UPLOAD_MODE))) ='sftp' )
                        AND (DATALENGTH(KEYFILE_PATH) > 2) 
                       THEN 1 
                       WHEN   (RTRIM(LTRIM(LOWER(UPLOAD_MODE))) != 'sftp' )
                        AND (DATALENGTH(KEYFILE_PATH) < 2) 
                       THEN 1
                       WHEN   (RTRIM(LTRIM(LOWER(UPLOAD_MODE))) != 'sftp' )
                        AND ( KEYFILE_PATH IS NULL) 
                       THEN 1
                       ELSE   0

                       END =0
    )

Andomar の提案/説明を検討した後、上記をまとめることができ、ここで必要なものに対してロジックが正しいかどうかを確認したかったのです。もう一度よろしくお願いします。

4

1 に答える 1

3

このチェックでは、すべてのエントリがsftp次の条件を満たしている必要があります。

RTRIM(LTRIM(LOWER(UPLOAD_MODE))) ='sftp' AND DATALENGTH(KEYFILE_PATH) > 2

あなたはおそらく次のことを意味します:

RTRIM(LTRIM(LOWER(UPLOAD_MODE))) = 'sftp' AND DATALENGTH(KEYFILE_PATH) > 2
OR
RTRIM(LTRIM(LOWER(ISNULL(UPLOAD_MODE,''))) <> 'sftp'

これによりsftpkeyfile_path、およびkeyfile_path.

于 2013-05-02T21:14:09.250 に答える