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) 甚至更差)。首先,如果您知道您只会有一个固定长度的字符串,请使用charnchar。其次,如果只是指定yn,最好直接使用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

sql-server笔记V20170429

SQL Server 索引最佳实践(SQL Server 2008)[关闭]

SQL-server'WEEKDAY'不是公认的内置函数名称[关闭]

sql 关闭所有连接SQL Server数据库

Microsoft SQL Server 查询连接数和关闭连接数