2013-05-02 2 views
0

기존 검사 테이블에 추가 할 검사 제약 조건은 다음과 같습니다.테이블 열에 대한 SQL 검사 제약 조건

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

UPLOAD_MODE 열은 NULLS를 허용하지 않으며 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의 제안/explaination을 고려하면, 위 조립 할 수 있었고, 내가 여기에 필요한 논리에 대한 수정하시기 바랍니다 경우 확인하고 싶었다. 다시 미리 감사드립니다.

+0

어떤 데이터베이스인가요? –

+0

SQL Server 데이터베이스 – Kobojunkie

+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' 

keyfile_pathsftp을 허용 것이 그와 함께 하나 (NULL 포함) 다른 업로드 모드 또는 keyfile_path없이.

+0

무슨 뜻인지 알 겠어. UPLOAD_MODE에 sftp 값이 들어 있으면 Keyfile_Path가 비어서는 안된다는 확인을 추가하려고했습니다. 대신에 하나가 sftp라면 다른 하나는 비어 있거나 null 일 것을 요구하는 제약 조건을 어떻게 추가 할 것인가? – Kobojunkie

+0

귀하의 의견에 따라 질문이 업데이트되었습니다. – Andomar

+0

+1 질문의 업데이트보다 명확한 +1. –

관련 문제