如何在VS Code中用正则查找缺少表架构的SQL语句?
解决VS Code中查找缺少架构声明的SQL语句问题
先纠正你之前的正则错误:正则里没有
!dbo这种否定写法,要实现“排除dbo/sys架构前缀”的需求,得用负向前瞻断言(?!pattern),这是正则里标准的否定匹配写法。下面是覆盖更多SQL场景的可用正则,能匹配不带dbo/sys架构的表引用语句:
(from|inner join|left join|right join|cross apply|outer apply|insert into|update|delete from)(\s|\r|\n)+(?!dbo\.|sys\.)[a-zA-Z0-9_]+拆解下这个正则的作用:
- 开头的括号里包含了所有常见的涉及表引用的SQL关键字,补上了你提到的APPLY、INSERT,还有UPDATE、DELETE这些场景
(\s|\r|\n)+用来匹配关键字和表名之间的任意空白、换行,比你之前的写法更简洁,\s本身包含空格、制表符,加上换行符兼容不同文件的换行格式(?!dbo\.|sys\.)是核心的否定断言:确保接下来的内容不是dbo.或sys.(注意点号要转义,因为正则里.是通配符)[a-zA-Z0-9_]+匹配表名,兼容大小写字母、数字和下划线,你可以根据自己的表名规则调整这个部分
使用时的小提示:
- 在VS Code的搜索栏里,一定要点击
.*按钮开启正则表达式模式 - 如果你的SQL代码大小写混用,要么勾选搜索栏的
Aa(匹配大小写),要么直接用上面给出的兼容大小写的正则
- 在VS Code的搜索栏里,一定要点击
内容的提问来源于stack exchange,提问作者sfcnzl
相关产品推荐
相关产品推荐

