如何将这两个由AND /作为参数值分隔的值组合传递给存储过程:
"8033301552*" OR "08033301552*"
或
"Taiwo*" AND "Ayedun*"
我的意思是我需要创建一个字符串并将其作为参数传递吗?
答案 0 :(得分:1)
官方不支持。
可以在
找到解决方法什么不起作用与RS无关,但与Stored有关 SQL Server中的过程。您不能在存储过程中执行以下操作。 假设您有一个名为@MyParams的参数 现在,您可以将该参数映射到多值参数,但是如果在您的 您尝试执行此操作的存储过程: 选择*来自sometable的sometable(@MyParams) 它不会起作用。试试吧。创建存储过程并尝试传递 存储过程的多值参数。它不会起作用。 你可以做的是有一个作为多值传递的字符串参数 参数然后将字符串更改为表。 这种技术是由SQL Server MVP Erland Sommarskog告诉我的 例如,我已经这样做了 内部联接charlist_to_table(@ STO,默认)f在b.sto = f.str上 所以请注意,这不是RS的问题,它严格来说是一个存储过程 问题。 这是功能:
CREATE FUNCTION charlist_to_table
(@list ntext,
@delimiter nchar(1) = N',')
RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
str varchar(4000),
nstr nvarchar(2000)) AS
BEGIN
DECLARE @pos int,
@textpos int,
@chunklen smallint,
@tmpstr nvarchar(4000),
@leftover nvarchar(4000),
@tmpval nvarchar(4000)
SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength(@list) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
SET @textpos = @textpos + @chunklen
SET @pos = charindex(@delimiter, @tmpstr)
WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (str, nstr) VALUES(@tmpval, @tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END
SET @leftover = @tmpstr
END
INSERT @tbl(str, nstr) VALUES (ltrim(rtrim(@leftover)),
ltrim(rtrim(@leftover)))
RETURN
END
GO
- Bruce Loehle-Conger MVP SQL Server Reporting Services “RolandMüller”在消息中写道
答案 1 :(得分:0)
您可以使用XML数据将值数组传递到存储过程中。我发现这是一个可行的解决方案,并解决了可能受SQL注入影响的动态SQL问题。
请查看this link以获取有关如何操作的基本示例。正如作者所说,对于某些解决方案来说,这可能有些过分,但我认为它非常简洁,可以根据您的要求进行修改。