我在论坛上搜索过并找到了一些示例,说明如何将逗号分隔值列表发送给SQL并进行处理。
我想知道我是否可以创建动态参数并将它们传递给存储过程或更简单地使特定任务变得更容易?
我接受一个字符串并创建一个'space'分隔值的数组,然后为每个值创建一个新参数(例如SearchText0,SearchText1等)。
For Each item In Searchstring
Parameters.(New SqlParameter("@SearchText" + Array.IndexOf(Searchstring, item).ToString, item)))
Next
运行存储过程时会出现问题,好像从数组中创建的参数太多而SP将无法执行,因为我可以将参数视为空值,因此可以正常工作。
@sUsercode as varchar (10) = '',
@SearchText1 as varchar (300) = '',
@SearchText2 as varchar (300) = '',
@SearchText3 as varchar (300) = '',
@SearchText4 as varchar (300) = ''
AS
BEGIN
SELECT TOP (20) ProdTBL.Material + ' | ' + ProdTBL.Description + ' [' + ProdTBL.Plant + ']' AS Mat, ProdTBL.Material, ProdTBL.Description, ProdTBL.Plant
FROM SCodes INNER JOIN ProdTBL ON SCodes.Plant = ProdTBL.Plant WHERE (SCodes.UserCode = @sUsercode) AND (ProdTBL.Bin <> 'DSCNTD') AND
(ProdTBL.Material LIKE '%' + @SearchText1 + '%' OR ProdTBL.Description LIKE '%' + @SearchText1 + '%' OR ProdTBL.Plant LIKE '%' + @SearchText1 + '%' OR ProdTBL.Manuf LIKE '%' + @SearchText1 + '%') AND
(ProdTBL.Material LIKE '%' + @SearchText2 + '%' OR ProdTBL.Description LIKE '%' + @SearchText2 + '%' OR ProdTBL.Plant LIKE '%' + @SearchText2 + '%' OR ProdTBL.Manuf LIKE '%' + @SearchText2 + '%') AND
(ProdTBL.Material LIKE '%' + @SearchText3 + '%' OR ProdTBL.Description LIKE '%' + @SearchText3 + '%' OR ProdTBL.Plant LIKE '%' + @SearchText3 + '%' OR ProdTBL.Manuf LIKE '%' + @SearchText3 + '%') AND
(ProdTBL.Material LIKE '%' + @SearchText4 + '%' OR ProdTBL.Description LIKE '%' + @SearchText4 + '%' OR ProdTBL.Plant LIKE '%' + @SearchText4 + '%' OR ProdTBL.Manuf LIKE '%' + @SearchText4 + '%')
END
我知道我可以编写命令字符串并像这样运行它但我希望能够不用担心任何人必须触摸vbcode并只更改存储过程。
大约有50列,我希望允许用户搜索其中的10个,而不会使SP变得庞大,也无需为vbcode中创建的每个潜在参数添加新行。
提前致谢。 千电子伏