我的输入参数是:
exec [dbo].[MULTI_VALUED_USER_INPUT_PARAMETER] N'2040,2041,2044,2047,2048'
我需要在数据库中搜索,我必须在这些输入中搜索
Product IN ('2040','2041','2044','2047','204048')
如何转换输入参数以将其一次放入“产品”搜索中
更新
我需要将输入拆分为字符串列表才能在其中搜索
答案 0 :(得分:0)
你传递的是这样的字符串
unique_reference
并且您希望将其解析为逗号分隔值。所以您需要先解析输入..
你可以使用split https://stackoverflow.com/a/41827643/6339597并在你的proc中进行如下所示的解析。
N'2040,2041,2044,2047,2048'
并在存储过程中传递字符串的位置传递上述输入
拆分字符串源代码:
select * from split_String(@String,',')
数字表:
CREATE FUNCTION dbo.SplitStrings_Numbers
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT Item = SUBSTRING(@List, Number,
CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)
FROM dbo.Numbers
WHERE Number <= CONVERT(INT, LEN(@List))
AND SUBSTRING(@Delimiter + @List, Number, LEN(@Delimiter)) = @Delimiter
);
GO
答案 1 :(得分:0)
我所理解的是您希望使用不同的参数执行该存储过程,这些参数必须包含在您编写的IN子句中。
你可以这样做:
.msi
答案 2 :(得分:0)
您可以使用动态查询并直接在查询中传递ID,但此选项容易受到SQL注入攻击。因此,您应首先拆分ID,然后将其与实际表格连接。你的程序应该是这样的:
null
注意:默认情况下,我认为ID为CREATE PROCEDURE [MULTI_VALUED_USER_INPUT_PARAMETER] @Ids NVARCHAR(1000)
AS
--DECLARE @Ids NVARCHAR(1000) = N'2040,2041,2044,2047,2048'
;WITH CTE
AS(
SELECT CAST('<N>' + REPLACE(@Ids,',','</N><N>') + '</N>' AS XML) [XMLids]
)
SELECT T.a.value('.', 'INT') AS ID,yt.*
FROM CTE
CROSS APPLY CTE.XMLids.nodes('/N') AS T(a)
INNER JOIN dbo.YourTable yt
ON T.a.value('.', 'INT') = yt.Product
,如果没有,请更新代码。如果需要,您可以轻松地将INT
替换为JOIN
子句。