如何创建使用正则表达式或LIKE进行输入验证的SQL存储过程?

2026-05-02 22:041阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1096个文字,预计阅读时间需要5分钟。

如何创建使用正则表达式或LIKE进行输入验证的SQL存储过程?

功能上,但存在明显界限——LIKE+仅支持简单通配符(%、_、[abc]),无法表达“至少一位数字+两位字母或邮箱格式这类逻辑。它适合做前缀校验(如WHERE @phone LIKE '1[3-9]%'或IN ('A01', 'B02')),但一旦规则变得复杂,就会写成冗长且嵌套的AND+LIKE字符串,可读性差,且漏判率高。”

实操建议:

  • 用户手机号校验优先用 LEN(@phone) = 11 AND @phone LIKE '1[3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]',比正则快,也兼容所有 SQL Server 版本
  • 避免用 LIKE '%@input%' 做模糊校验——这会绕过所有索引,且不属于“输入校验”,属于查询逻辑
  • 如果字段允许为空,校验前先用 ISNULL(@input, '') 统一处理,否则 NULL LIKE 'a%' 返回 UNKNOWN,导致校验逻辑失效

SQL Server 2017+ 怎么安全调用 STRING_SPLITREGEXP_LIKE

SQL Server **没有原生 REGEXP_LIKE** ——这是 Oracle/MySQL 的函数。很多人搜到的“SQL Server 正则”方案,实际是靠 CLR 集成或调用外部脚本,生产环境禁用居多。

阅读全文

本文共计1096个文字,预计阅读时间需要5分钟。

如何创建使用正则表达式或LIKE进行输入验证的SQL存储过程?

功能上,但存在明显界限——LIKE+仅支持简单通配符(%、_、[abc]),无法表达“至少一位数字+两位字母或邮箱格式这类逻辑。它适合做前缀校验(如WHERE @phone LIKE '1[3-9]%'或IN ('A01', 'B02')),但一旦规则变得复杂,就会写成冗长且嵌套的AND+LIKE字符串,可读性差,且漏判率高。”

实操建议:

  • 用户手机号校验优先用 LEN(@phone) = 11 AND @phone LIKE '1[3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]',比正则快,也兼容所有 SQL Server 版本
  • 避免用 LIKE '%@input%' 做模糊校验——这会绕过所有索引,且不属于“输入校验”,属于查询逻辑
  • 如果字段允许为空,校验前先用 ISNULL(@input, '') 统一处理,否则 NULL LIKE 'a%' 返回 UNKNOWN,导致校验逻辑失效

SQL Server 2017+ 怎么安全调用 STRING_SPLITREGEXP_LIKE

SQL Server **没有原生 REGEXP_LIKE** ——这是 Oracle/MySQL 的函数。很多人搜到的“SQL Server 正则”方案,实际是靠 CLR 集成或调用外部脚本,生产环境禁用居多。

阅读全文