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