如何约束NVARCHAR列上没有空字符串

Kas*_*hef 22 sql sql-server

NOT NULL在我的NVARCHAR列上添加了一个约束,因此它不允许任何空值.但不幸的是,SQL Server处理NULL和清空值作为两个单独的值!

那么如何在不向列中插入任何内容时使服务器抛出异常?

我正在考虑使用约束CHECK但是在使用NVARCHAR列时我没有找到任何样本!

tva*_*son 35

您可以添加一个检查约束,以确保该字符串不为空.

CREATE TABLE [dbo].[Foo](
    [bar] [nvarchar](50) NOT NULL
)

ALTER TABLE [dbo].[Foo] WITH CHECK 
ADD  CONSTRAINT [CK_Foo] CHECK  (([bar]<>N''))
Run Code Online (Sandbox Code Playgroud)

  • 处理修剪的另一种形式是"Len(RTrim([bar]))> 0" (14认同)
  • @Thomas - 没必要.无论如何,在字符串比较中忽略尾随空格.并由`LEN`.`选择案例当N'=''那么'空'结束,LEN('')`返回`空,0 (3认同)

ntz*_*lis 6

使用检查约束:

CREATE TABLE SomeTable( 
    SomeColumn VARCHAR(50) NOT NULL CHECK (SomeColumn <> '')
)
Run Code Online (Sandbox Code Playgroud)