首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用参数数目可变的LIKE子句时避免内联SQL

如何在使用参数数目可变的LIKE子句时避免内联SQL
EN

Stack Overflow用户
提问于 2012-11-29 06:54:01
回答 1查看 422关注 0票数 0

给定一个6位字符串的列表(表示社会保险号的一部分),我需要拉回其SSN与其中一个字符串匹配的用户的数据集。我的SQL是:

代码语言:javascript
复制
SELECT DISTINCT
         u.ssn,
         u.name
FROM user u
WHERE (u.ssn LIKE '%111111%' OR u.ssn LIKE '%222222%')

我希望使用预准备语句,而不是生成内联SQL (注入攻击等)。有没有一种方法可以在不创建内联SQL的情况下恢复数据?

similar questions on this site,但在我的例子中的问题是,使用in子句而不是LIKE子句是不可行的。我只得到了6位数,并且必须搜索整个10位数的SSN。

附注:这是一个具有SQL Server后端的.Net应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-29 07:14:42

将您的搜索词放在一个表中,并将它们连接起来:

代码语言:javascript
复制
declare @SSN table (SSN char(9))
insert into @SSN select '123456789' union select '456789321' union select '789123456'

declare @SearchString table (SearchString varchar(9))
insert into @SearchString select '893' union select '9123'

select ssn.SSN
from @SSN ssn
join @SearchString sst on ssn.SSN like '%' + sst.SearchString +'%'

如果性能有问题,并且搜索字符串的长度始终至少为5个字符(例如),则可以创建一个包含每个SSN和每个可能的5字符子字符串的表。然后,您可以在匹配值而不是部分值上联接列。但同样,这取决于您的需求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13615875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档