我目前有nvarchar(50)
的主键字段,我愿意更改类型,如果我可以让它不接受空格。反正有吗?
应该允许以下内容:
------
AAAA
BBBB
CCCC
不应允许以下内容:
------
AA AAA
BBBB B
C CCCC
答案 0 :(得分:3)
您可以添加以下检查约束:
<击> 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
结果:
Msg 547,Level 16,State 0,Line 1
INSERT语句冲突 使用CHECK约束“chkNoSpaces”。冲突发生在 数据库“tempdb”,表“dbo.bar”,列'foo'。该声明有 已被终止。
清理:
DROP TABLE dbo.bar;
修改强>
如果您出于某种原因需要通过UI执行此操作(我再次建议您使用可以创建原子,可重复,保存到文件,存储在源代码管理中等的脚本来执行此操作):
column_name NOT LIKE '% %'
(使用您的实际列名,而不是column_name
)请注意,UI实际上会更改子句的结构,例如(NOT col_name LIKE '% %')