SQL名称检查功能SSMS
Posted
技术标签:
【中文标题】SQL名称检查功能SSMS【英文标题】:SQL name checking function SSMS 【发布时间】:2022-01-20 15:36:14 【问题描述】:如何使函数只在使用英文和俄文字母时才取值。 以及包含以下所有其他值:
-
数字
特殊字符
字符数小于 2 且大于 50 - 函数不接受
CREATE FUNCTION dbo.namecheck(@name VARCHAR(50))
RETURNS BIT AS BEGIN
IF
PATINDEX('%[a-z][A-Z][а-я][А-Я]%', @name) = 0
RETURN 1;
ELSE IF
(LEN(@name) < 2 OR LEN(@name) > 50)
RETURN 0
RETURN 0
END;
我是这样写的,但它不能正常工作,它接受包含数值、特殊字符的名称
【问题讨论】:
“它不能正常工作”不是一个很有帮助的问题陈述。 它不能“正确”工作怎么办?见How to Ask 反转逻辑;如果集合中出现 not 的字符,即LIKE N'%[^a-zA-Zа-яА-Я]'
(对于 Unicode,当然使用 N
和NVARCHAR(50)
,因为西里尔字符不太可能适合默认排序规则)。
【参考方案1】:
不正常时以false退出。
然后默认返回true,因为检查没有发现任何错误。
CREATE FUNCTION dbo.namecheck(@name VARCHAR(51)) RETURNS BIT AS BEGIN IF (LEN(@name) < 2 OR LEN(@name) > 50) RETURN 0; IF @name LIKE '%[^a-zA-Zа-яА-Я]%' RETURN 0; RETURN 1; END; GO
select col, dbo.namecheck(col) chk from (values ('ab'), ('AЯ'), (N'abcЯ'), ('AB.cd'), ('ABCD001'), (replicate('X', 55)) ) q(col)
上校 |查克 :------------------------------------------------ ----- | :---- ab |真的 一种? |真的 abcЯ |真的 AB.cd |错误的 ABCD001 |错误的 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |错误的
db小提琴here
【讨论】:
以上是关于SQL名称检查功能SSMS的主要内容,如果未能解决你的问题,请参考以下文章
无法从 SSMS 连接到 SQL Server Express
SQL Server Management Studio(SSMS)修复来解决SSMS找不到的问题