如何创建使用正则表达式或LIKE进行输入验证的SQL存储过程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1096个文字,预计阅读时间需要5分钟。
功能上,但存在明显界限——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_SPLIT 和 REGEXP_LIKE?
SQL Server **没有原生 REGEXP_LIKE** ——这是 Oracle/MySQL 的函数。很多人搜到的“SQL Server 正则”方案,实际是靠 CLR 集成或调用外部脚本,生产环境禁用居多。
本文共计1096个文字,预计阅读时间需要5分钟。
功能上,但存在明显界限——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_SPLIT 和 REGEXP_LIKE?
SQL Server **没有原生 REGEXP_LIKE** ——这是 Oracle/MySQL 的函数。很多人搜到的“SQL Server 正则”方案,实际是靠 CLR 集成或调用外部脚本,生产环境禁用居多。

