存储过程参数

时间:2011-07-01 05:14:08

标签: sql sql-server

如何将这两个由AND /作为参数值分隔的值组合传递给存储过程:

"8033301552*" OR "08033301552*"

"Taiwo*" AND "Ayedun*"

我的意思是我需要创建一个字符串并将其作为参数传递吗?

2 个答案:

答案 0 :(得分:1)

官方不支持。

可以在

找到解决方法

http://groups.google.com/group/microsoft.public.sqlserver.reportingsvcs/browse_thread/thread/a5e0fdb24323aa13/e0fcc4c2d38883ec%23e0fcc4c2d38883ec?pli=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以获取有关如何操作的基本示例。正如作者所说,对于某些解决方案来说,这可能有些过分,但我认为它非常简洁,可以根据您的要求进行修改。