我有以下检查约束要添加到现有表。
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列是NVARCHAR(400)列,具有IS NULL默认设置。但是,如果UPLOAD_MODE中的值设置为'sftp',我想要的是确保还提供了密钥文件路径。
ALTER TABLE语句与CHECK约束“PROCESS_RequireKeyFileOnMODE_Constraint”冲突。冲突发生在数据库“FILECONTROL”,表“dbo.PROCESS_UPLOADDATA”。
但是当我执行时,我收到以下错误消息。非常感谢任何帮助。 SQL SERVER数据库!提前致谢。
//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的建议/解释之后,我能够把上面的内容放在一起,并且想要确定逻辑是否符合我的需要。再次感谢提前。
答案 0 :(得分: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'
允许sftp
使用keyfile_path
,以及任何其他上传模式(包括null),无论是否有keyfile_path
。