SQL Server 约束 [关闭]
Posted
技术标签:
【中文标题】SQL Server 约束 [关闭]【英文标题】:SQL Server constraint [closed] 【发布时间】:2017-06-06 09:15:35 【问题描述】:如果状态等于“y”,我想删除路径。但它不起作用。
create table example
(
[status] varchar(1) not null check([status] in ('y', 'n')),
[path] varchar(70) not null
if([status] == 'y')
[path] == null;
)
【问题讨论】:
是 SELECT 吗?你能给我们完整的声明吗? 你也可以给我们完整的错误信息吗? 不,它不是一个选择它是创建表 如果status
更新为'y'
,您的意思是要删除path
中的任何值?我不会去那里。相反,我要么使用计算列,要么在 select 语句中使用 case
。丢失数据与数据库应该做的相反。
除了Zohar Peled 所说的,如果您将[path] 定义为不为空,您真的要在下一行中说[path] 为空吗?可以为空吗?
【参考方案1】:
正如我在评论中所写,我不会将现有值设置为 null
。相反,计算列对我来说似乎是一个更好的选择。
此外,varchar(1)
是您可以选择的第二差数据类型(nvarchar(1)
甚至更差)。首先,如果您知道您只会有一个固定长度的字符串,请使用char
或nchar
。其次,如果只是指定y
或n
,最好直接使用bit
,它只保存0或1的值。
CREATE TABLE Example
(
[status] bit not null, -- 0 for `n`, 1 for `y`
[originalPath] varchar(70) not null, -- keeps the original value. Think write only.
[path] as (case when status = 1 then
null
else
originalPath
end) -- computed column to use in select statements. This is read only.
)
【讨论】:
以上是关于SQL Server 约束 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 索引最佳实践(SQL Server 2008)[关闭]