首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个存储过程的单个参数中传递多个值?

如何在一个存储过程的单个参数中传递多个值?
EN

Stack Overflow用户
提问于 2012-05-08 14:19:44
回答 3查看 6.4K关注 0票数 1

我想在一个参数中传递多个值。SQL Server 2005

EN

回答 3

Stack Overflow用户

发布于 2012-05-12 04:14:04

您可以创建一个函数:

代码语言:javascript
运行
复制
ALTER  FUNCTION [dbo].[CSVStringsToTable_fn] ( @array VARCHAR(8000) )
RETURNS @Table TABLE ( value VARCHAR(100) )
AS 
    BEGIN
        DECLARE @separator_position INTEGER,
            @array_value VARCHAR(8000)  

        SET @array = @array + ','

        WHILE PATINDEX('%,%', @array) <> 0 
            BEGIN
                SELECT  @separator_position = PATINDEX('%,%', @array)
                SELECT  @array_value = LEFT(@array, @separator_position - 1)

                INSERT  @Table
                VALUES  ( @array_value )

                SELECT  @array = STUFF(@array, 1, @separator_position, '')
            END
        RETURN
    END

并从中选择:

代码语言:javascript
运行
复制
DECLARE @LocationList VARCHAR(1000)
SET @LocationList = '1,32'

SELECT  Locations 
FROM    table
WHERE   LocationID IN ( SELECT   CAST(value AS INT)
                           FROM     dbo.CSVStringsToTable_fn(@LocationList) )

代码语言:javascript
运行
复制
SELECT  Locations
FROM    table loc
        INNER JOIN dbo.CSVStringsToTable_fn(@LocationList) list
            ON CAST(list.value AS INT) = loc.LocationID

当您尝试将多值列表从SSRS发送到PROC时,这非常有用。

CSV编辑:显示您可能需要强制转换-但是要小心控制在列表中发送的内容

票数 1
EN

Stack Overflow用户

发布于 2012-05-12 04:59:52

您可以让存储过程接受一个xml类型的输入变量,然后解压元素并获取它们。例如:

代码语言:javascript
运行
复制
DECLARE @XMLData xml

DECLARE 
    @Code varchar(10),
    @Description varchar(10)

SET @XMLData = 
'
    <SomeCollection>
      <SomeItem>
        <Code>ABCD1234</Code>
        <Description>Widget</Description>
      </SomeItem>
    </SomeCollection>
'

SELECT 
    @Code = SomeItems.SomeItem.value('Code[1]', 'varchar(10)'),
    @Description = SomeItems.SomeItem.value('Description[1]', 'varchar(100)')
FROM @XMLDATA.nodes('//SomeItem') SomeItems (SomeItem)

SELECT @Code AS Code, @Description AS Description

结果:

代码语言:javascript
运行
复制
Code        Description
==========  ===========
ABCD1234    Widget
票数 1
EN

Stack Overflow用户

发布于 2015-07-10 20:50:48

有多种方法可以实现这一点,具体方法如下:

  1. Passing CSV将字符串作为(N)VARCHAR参数的参数列出,然后在您的SP中解析它,首先check here.
  2. Create a XML ,然后将其作为XML数据类型参数传递。你需要在SP内部解析XML,你可能需要APPLY运算符,在SP外check here.
  3. Create一个临时表,插入多个值作为多行,这里不需要参数。然后在SP内部使用临时表,check here.
  4. If您在2008及以上版本尝试使用check here.

(表值参数)参数,并将它们作为传递

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10493545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档