Sql 存储过程参数

Sql 存储过程参数,sql,sql-server,Sql,Sql Server,如何将这两个由和/分隔的值组合作为参数值传递给存储过程: "8033301552*" OR "08033301552*" 或 我的意思是我需要创建一个字符串并将其作为参数传递吗?官方不支持 可以在以下位置找到解决方法: 不起作用的东西实际上与RS无关,而是与存储 SQL Server中的过程。不能在存储过程中执行以下操作。 假设您有一个名为@MyParams的参数 现在可以将该参数映射到多值参数,但如果 尝试执行此操作的存储过程: 从@MyParams中的sometable中的somefiel

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

"8033301552*" OR "08033301552*"


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

官方不支持

可以在以下位置找到解决方法:

不起作用的东西实际上与RS无关,而是与存储 SQL Server中的过程。不能在存储过程中执行以下操作。 假设您有一个名为@MyParams的参数 现在可以将该参数映射到多值参数,但如果 尝试执行此操作的存储过程: 从@MyParams中的sometable中的somefield中选择* 这行不通。试试看。创建存储过程并尝试传递 存储过程的多值参数。这行不通。 您可以做的是将字符串参数作为多值传递 参数,然后将字符串更改为表。 SQL Server MVP Erland Sommarskog告诉我这项技术 例如,我做过这件事 内部连接字符列表\u到_table@STO,b.sto上的默认值f=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 
- 布鲁斯·勒勒·康格 MVP SQL Server报告服务
罗兰·穆勒(Roland Müller)在消息中写道,您可以使用XML数据将值数组传递到存储的进程中。我发现这是一个可行的解决方案,解决了动态SQL可能受到SQL注入影响的问题


请看一个关于如何做的基本示例。正如作者所建议的,对于某些解决方案来说,这可能有些过分,但我认为它非常简洁,可以修改以满足您的要求。

您能否发布解决方法的要点。该链接要求我使用Google帐户登录。
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