这个字段规则怎么设?
设置一字段varchar(20)值只允许输入如下内容:
1: 数字0到9
2: 英文字母
3: 下划线
其它内容不允许输入,如空格,回车,加减号等。
问题点数:100、回复次数:8Top
1 楼skyboy0720(曲终人散)回复于 2004-12-02 10:48:30 得分 0
自定义数据类型Top
2 楼lsxaa(小李铅笔刀)回复于 2004-12-02 10:58:51 得分 0
用函数做
create function chk(@字段)
returns bit
as
begin
if 1: 数字0到9
2: 英文字母
3: 下划线
return 1
return 0
end
add check(dbo.chk(字段)>0)Top
3 楼txlicenhe(马可)回复于 2004-12-02 11:11:57 得分 0
看来好象真要写一个检验的函数来检验每一字符才行。
暂时没想到其它好办法。(感觉应该会有的)
Top
4 楼txlicenhe(马可)回复于 2004-12-02 11:22:35 得分 40
先就这样写吧,希望能有更好的办法。
create function f_chk(@s varchar(20))
returns int
as
begin
declare @ret int
set @ret = 1
if len(@s) <1
set @ret = 1
declare @i int
set @i = 1
while @i <=len(@s)
begin
if substring(@s,@i,1) not like ('%[0-9a-z_]%')
set @ret = 0
set @i = @i+1
end
return @ret
end
go
create table test(a varchar(20) check(dbo.f_chk(a) = 1))
insert test values('abc_123')
insert test values('abc_123?')
select * from test
/*
(所影响的行数为 1 行)
服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'CK__test__a__27CF9CBD' 冲突。该冲突发生于数据库 'master',表 'test', column 'a'。
语句已终止。
a
--------------------
abc_123
(所影响的行数为 1 行)
*/
Top
5 楼lsxaa(小李铅笔刀)回复于 2004-12-02 13:18:45 得分 50
create table test(a varchar(20) check(a not like '%[^0-9a-z_]%'))
Top
6 楼yesyesyes()回复于 2004-12-02 13:45:32 得分 3
x like '%[0-9]%' or x like '%[a-z]%' or x like '%!_%' escape '!'Top
7 楼txlicenhe(马可)回复于 2004-12-02 14:30:15 得分 4
还是铅笔刀的有效。Top
8 楼yangh44(涉世之初)回复于 2004-12-02 15:48:25 得分 3
lsxaa(小李铅笔刀) 的好!
Top




