如何搜索相同的输入参数

时间:2017-08-23 09:51:23

标签: sql-server

我的输入参数是:

exec [dbo].[MULTI_VALUED_USER_INPUT_PARAMETER]  N'2040,2041,2044,2047,2048' 

我需要在数据库中搜索,我必须在这些输入中搜索

Product IN ('2040','2041','2044','2047','204048')

如何转换输入参数以将其一次放入“产品”搜索中

更新

我需要将输入拆分为字符串列表才能在其中搜索

3 个答案:

答案 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子句。