我目前有一个主键字段nvarchar(50)
,如果我能让它不接受空格,我愿意更改类型。有没有办法做到这一点?
应允许以下内容:
------
AAAA
BBBB
CCCC
不应允许以下情况:
------
AA AAA
BBBB B
C CCCC
我目前有一个主键字段nvarchar(50)
,如果我能让它不接受空格,我愿意更改类型。有没有办法做到这一点?
应允许以下内容:
------
AAAA
BBBB
CCCC
不应允许以下情况:
------
AA AAA
BBBB B
C CCCC
您可以添加以下检查约束:
CHECK LEN(col) = LEN(REPLACE(col, ' ', ''));
...或者...
CHECK (col NOT LIKE '% %');
...或者...
CHECK (CHARINDEX(' ', col) = 0)
例子:
USE tempdb;
GO
CREATE TABLE dbo.bar(foo NVARCHAR(50) PRIMARY KEY);
ALTER TABLE dbo.bar ADD CONSTRAINT chkNoSpaces
CHECK (foo NOT LIKE '% %');
成功:
INSERT dbo.bar(foo) SELECT 'AAAA';
GO
失败:
INSERT dbo.bar(foo) SELECT 'AA AA';
GO
结果:
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束“chkNoSpaces”冲突。冲突发生在数据库“tempdb”、表“dbo.bar”、列“foo”中。
该语句已终止。
清理:
DROP TABLE dbo.bar;
编辑
如果您出于某种原因需要通过 UI 执行此操作(我再次建议您使用可以使原子化、可重复、保存到文件、存储在源代码管理中等的脚本来执行此操作):
column_name NOT LIKE '% %'
在“表达式”框中输入(使用您的实际列名,而不是column_name
)请注意,用户界面实际上改变了子句的结构,例如(NOT col_name LIKE '% %')