我在SQL Server中有一个表,其中一列是varchar(50)并设置为非空列。此列不是主键。
如果我尝试执行空插入,则会收到错误:
无法将值NULL插入列中。列不允许空值。 INSERT失败。
预期。
如果我试图插入一个''我希望同样如此。但由于某种原因,它允许空白没有问题。为什么?如何让表格不允许空白进入此特定列?我不想要一个默认值,我希望插入失败的方式与null失败的方式相同。
谢谢
答案 0 :(得分:8)
空字符串与NULL
值不同。 NULL
真的意味着不可用,不知道。
您可以添加CHECK
约束来实现您所需的功能:
ALTER TABLE mytable ADD CONSTRAINT CHK_EmptyString CHECK ( myCol <> '')
答案 1 :(得分:3)
答案 2 :(得分:1)
因为空字符串不是NULL值。
您可以在表/列上添加CHECK约束以获得所需的结果。
create table #a(name nvarchar(20))
alter table #a add check (name != '')
顺便说一句,该检查也会阻止只有空格的字符串。
insert into #a(name) values ('')
insert into #a(name) values (' ')
insert into #a(name) values (' ')
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "CK__#a__________name__1CA18AD3". The conflict occurred in database "tempdb", table "dbo.#a__________________________________________________________________________________________________________________0000000BF04A", column 'name'.
The statement has been terminated.
编辑:约束以允许仅空格插入。
ALTER TABLE #a ADD CHECK (name != '' or charindex(' ',name) = 1)
答案 3 :(得分:-2)
如果我尝试插入&#39;
,我希望同样如此
我想要牛排,但素食主义者。它没有任何意义 - 不是在&#34;相同&#34; (即相同的错误),因为null不是空格。
相似 - 好的。但随后 - 有些情况可能需要空间。不对你好吗?为什么不设置检查约束?这是将值限制为特定值的方法。