2011-07-01 245 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瞭解如何操作的基本示例。正如作者所言,這對某些解決方案來說可能是過度的,但我認爲它很整齊,可以修改以滿足您的要求。