如果我使用确定性加密,我可以在加密列中执行搜索。例如:
DECLARE @email NVARCHAR(222) = 'test';
SELECT *
FROM Users
Where email = @email;
但是如何通过多个值执行搜索?例如,如果我想获取电子邮件地址为[email protected]
,[email protected]
和[email protected]
的记录。
我无法创建许多输入参数,因为通常这些值是动态的,并且例如以CSV
字符串传递。
在你的情况下,我建议拆分,如果它适合你。
试试这个问题:让我知道它是否适合你
DECLARE @email NVARCHAR(222) = '[email protected],[email protected],[email protected]'
DECLARE @Delimiter NCHAR(1) = ','
DECLARE @EmailParam TABLE(email NVARCHAR(222))
;WITH Split(StPos,EndPos)
AS(
SELECT 0 AS StPos, CHARINDEX(@Delimiter,@email) AS EndPos
UNION ALL
SELECT EndPos+1, CHARINDEX(@Delimiter,@email,EndPos+1)
FROM Split
WHERE EndPos > 0
)
INSERT INTO @EmailParam (email)
SELECT SUBSTRING(@email,StPos,COALESCE(NULLIF(EndPos,0),LEN(@email)+1)-StPos) FROM Split
SELECT Users.*
FROM Users
INNER JOIN @EmailParam EmailParam
ON Users.email = EmailParam.email;
说明:
DECLARE @email NVARCHAR(222) = '[email protected],[email protected],[email protected]'
您可以使用任何tsql技术拆分它,我在这里使用了公用表表达式。@EmailParam
的表变量中得到了它。然后,您可以轻松使用添加联接并对其进行过滤。inner join
。 ,