TSQL分割逗号分隔字符串
我正在尝试创建一个存储过程,该过程将拆分网页上的3个文本框,这些文本框包含用户输入,并且其中都包含逗号分隔的字符串。在我们的表中有一个名为“combined_name”的字段,我们必须搜索名字和姓氏以及任何已知的错误或昵称等。例如@p1:“grei,grie”@p2:“joh,jon,j…”p3:为空 第三个框的原因是,在我设置了基本设置之后,我们将不包含、以开始、以结束,并进一步缩小结果范围 因此,我希望获得所有包含这些组合的记录。我最初是在LINQ中编写的,但它不起作用,因为您无法查询列表和数据集。数据集太大(130万条记录),无法放入列表中,因此我必须使用一个可能更好的存储过程 我是否必须使用2个SP,一个用于拆分每个字段,另一个用于选择查询,或者可以使用一个SP来完成?我在tsql中使用什么函数来包含内容?我尝试在一个查询中使用win,但无法理解它如何处理多个参数 请注意,这将是一个访问受限的内部站点,因此担心sql注入不是一个优先事项 我尝试了动态SQL,但没有得到正确的结果:TSQL分割逗号分隔字符串,tsql,list,stored-procedures,Tsql,List,Stored Procedures,我正在尝试创建一个存储过程,该过程将拆分网页上的3个文本框,这些文本框包含用户输入,并且其中都包含逗号分隔的字符串。在我们的表中有一个名为“combined_name”的字段,我们必须搜索名字和姓氏以及任何已知的错误或昵称等。例如@p1:“grei,grie”@p2:“joh,jon,j…”p3:为空 第三个框的原因是,在我设置了基本设置之后,我们将不包含、以开始、以结束,并进一步缩小结果范围 因此,我希望获得所有包含这些组合的记录。我最初是在LINQ中编写的,但它不起作用,因为您无法查询列表和
CREATE PROCEDURE uspJudgments @fullName nvarchar(100) AS
EXEC('SELECT *
FROM new_judgment_system.dbo.defendants_ALL
WHERE combined_name IN (' + @fullName + ')')
GO
EXEC uspJudgments @fullName = '''grein'', ''grien'''
即使检索到了正确的结果,如何使用3个参数执行此操作 您可以尝试使用拆分字符串并获取字符串表。然后,为了获得所有的组合,您可以使用这两个表的完全联接。然后进行选择。以下是我设置的表值函数:
ALTER FUNCTION [dbo].[Split] (@sep char(1), @s varchar(8000))
RETURNS table
AS
RETURN (
WITH splitter_cte AS (
SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos
UNION ALL
SELECT CHARINDEX(@sep, @s, pos + 1), pos
FROM splitter_cte
WHERE pos > 0
)
SELECT SUBSTRING(@s, lastPos + 1,
case when pos = 0 then 80000
else pos - lastPos -1 end) as OutputValues
FROM splitter_cte
)
)
可能的重复我查看了这一点并尝试使用动态SQL,但问题是我不确定如何使用引号传递值,或者是否可以将其与多个逗号分隔的参数一起使用。另外,您是否在中使用或是否有其他函数?您不希望像那样使用动态SQL,因为它非常容易受到SQL注入攻击。SQL注入不会成为问题。这是一个4个人也可以访问的内部应用程序。在任何情况下,在这种情况下都不需要动态SQL。我在链接中的回答显示了如何以T-SQL中已知的最快方式实现其他技术之一(字符串拆分)。