如何编写检查约束以禁止空 varchar 字段?

ber*_*d_k 5 sql-server constraint

在 SQL Server 上,不可为空的 varchar 列可以包含空字符串。

在 ORACLE 下它们不能,因为 varchar2 将 '' 视为等同于 NULL。

如果您设计的数据库架构适用于两个 RDBMS,那么向 SQL Server 上的每个不可为 null 的 varchar 列添加一个不允许空字符串的约束似乎是个好主意。

但哪种方法是制定这种约束的最佳方式?

我开始了

if OBJECT_ID('varchar_without_empty_cols') > 0 drop table varchar_without_empty_cols
go

create table varchar_without_empty_cols (
id int ,
val varchar(10) not null CHECK (val <> '') 
)
go


insert into varchar_without_empty_cols values (1, ' ')  -- this ought be OK
go
insert into varchar_without_empty_cols values (2, '')   -- this has to violate the check
go
insert into varchar_without_empty_cols values (3, null) -- this violates the not null
go 

select * from varchar_without_empty_cols
Run Code Online (Sandbox Code Playgroud)

但是这个约束不仅禁止空字符串,这是有意的,而且还禁止由单个字符组成的字符串,这不是我想要的。

Mar*_*ith 9

要允许仅包含空格的字符串但不允许使用空字符串,您可以使用

CREATE TABLE varchar_without_empty_cols
  (
     id  INT,
     val VARCHAR(10) NOT NULL CHECK (DATALENGTH(val) > 0)
  )  
Run Code Online (Sandbox Code Playgroud)

  • @bernd_k - `检查(val LIKE '_%')` (2认同)