2011-07-01 247 views
-2

如何传递通过分离这两个值组合/作为参数值存储过程:存储过程的参数

"8033301552*" OR "08033301552*" 

"Taiwo*" AND "Ayedun*" 

我的意思是,我需要创建一个字符串和把它作为参数传递?

回答

1

正式不支持。

一种解决方法可以在

http://groups.google.com/group/microsoft.public.sqlserver.reportingsvcs/browse_thread/thread/a5e0fdb24323aa13/e0fcc4c2d38883ec%23e0fcc4c2d38883ec?pli=1

发现什么不工作有没有真正做到与RS,但与在SQL Server存储过程 做。您无法在存储过程中执行以下操作。 比方说,你有一个名为@MyParams 现在您可以在参数映射到多值参数,参数,但如果在你的 存储过程,你尝试这样做: SELECT * FROM sometable其中(@MyParams)somefield 它将无法工作。尝试一下。创建一个存储过程并尝试将多值参数传递给存储过程。它不会工作。 您可以执行的操作是将字符串参数作为多值 参数传递,然后将该字符串更改为表格。 这种技术是通过SQL Server MVP告诉我的,Erland Sommarskog 例如我已经完成了这个 内部连接charlist_to_table(@ STO,默认)f on 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 

- 布鲁斯Loehle - 康格 MVP SQL Server报表服务 “罗兰·缪勒”在信息中写道

+0

您可以发布变通办法的要点吗?该链接要求我使用Google帐户登录。 –

0

可以传递值的数组到一个存储过程中使用XML数据。我发现这是一个可行的解决方案,并解决了可能受SQL注入影响的动态SQL问题。

查看this link了解如何操作的基本示例。正如作者所言,这对某些解决方案来说可能是过度的,但我认为它很整齐,可以修改以满足您的要求。