SQL:在数据库的每个varchar列中搜索字符串

And*_*ite 18 sql sql-server string search

我有一个数据库,其中拼写错误的字符串出现在不同表中的不同位置.是否有SQL查询可用于在数据库中的每个可能的varchar/text列中搜索此字符串?

我正在考虑尝试以某种方式使用information_schema视图来创建动态查询,但我不确定这是否有效,或者是否有更好的方法.

如果有帮助,我正在使用MS SQL Server.

edo*_*oft 24

使用此处的技术,以下脚本为给定数据库中的所有((n)var)char列生成SELECT.复制/粘贴输出,删除最后一个'union'并执行..你需要用你正在寻找的字符串替换MISSPELLING HERE.

select 
'select distinct ''' + tab.name + '.' + col.name 
+ '''  from [' + tab.name 
+ '] where [' + col.name + '] like ''%MISSPELLING HERE%'' union ' 
from sys.tables tab 
join sys.columns col on (tab.object_id = col.object_id)
join sys.types types on (col.system_type_id = types.system_type_id) 
where tab.type_desc ='USER_TABLE' 
and types.name IN ('CHAR', 'NCHAR', 'VARCHAR', 'NVARCHAR');
Run Code Online (Sandbox Code Playgroud)

  • 如果您计划在生产数据库上运行此命令,则可以添加(NOLOCK)或"设置事务隔离级别读取未提交" (2认同)

小智 7

使用查询会使这比实际需要的更复杂.为什么不考虑一些存在的免费SQL搜索工具.ApexSQL有ApexSQL搜索,还有Red-Gate的SQL搜索.这两项都可以轻松完成工作.