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,当然使用 NNVARCHAR(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 2019区别

在 SQL (SSMS) 中通过 LIKE 运算符传递列表

无法从 SSMS 连接到 SQL Server Express

SQL Server Management Studio(SSMS)修复来解决SSMS找不到的问题

如何在 SSMS 或 DataGrip 中每行使用多个变量格式化 SQL

怎样使用SQL Server Management Studio