0

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

SELECT DISTINCT
         u.ssn,
         u.name
FROM user u
WHERE (u.ssn LIKE '%111111%' OR u.ssn LIKE '%222222%')

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

这个站点上有类似的问题,但在我的情况下,问题是使用 IN 子句而不是 LIKE 不是一种选择。我只有 6 位数字,并且必须搜索整个 10 位数字的 SSN。

ps 这是一个带有 SQL Server 后端的 .Net 应用程序。

4

1 回答 1

2

将您的搜索词放在一个表格中并加入它们:

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 个字符子字符串的表。然后你可以加入匹配值而不是部分值的列。但同样,这取决于您的要求。

于 2012-11-28T23:14:41.910 回答