代码之家  ›  专栏  ›  技术社区  ›  Himadri

在执行SturdPro时,是否可以将表作为参数传递?

  •  3
  • Himadri  · 技术社区  · 17 年前

    在执行storedproc时,是否可以将表(或表变量)作为storedproc的参数传递。如果是,那么怎么做。我需要一个例子。

    请帮忙。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Adriaan Stander    17 年前

    在sql server 2005中,没有。

    可以使用XMLDOCs或逗号分隔的字符串(使用拆分函数)

    CREATE FUNCTION [dbo].[SplitString]
    (
            @String VARCHAR(8000) ,
            @Delimiter  VARCHAR(10)
    )
    RETURNS @RetTable TABLE(
            String varchar(1000)
    )
    AS 
    BEGIN
        DECLARE @i INT ,
                @j INT
        SELECT  @i = 1
        WHILE @i <= LEN(@String)
        BEGIN
            SELECT  @j = CHARINDEX(@Delimiter, @String, @i)
            IF @j = 0
            BEGIN
                SELECT  @j = LEN(@String) + 1
            END
            INSERT  @RetTable SELECT SUBSTRING(@String, @i, @j - @i)
            SELECT  @i = @j + LEN(@Delimiter)
        END
        RETURN
    END
    

    也见

    passing-lists-to-sql-server-2005-with-xml-parameters

    和

    beginning-sql-server-2005-xml-programming

        2
  •  0
  •   pierre    17 年前

    在Oracle中,您可以使用类型和对象来实现IIRC。但是,您不能使用游标/循环吗?如果你这么做是为了捕捉动态数据?

       CURSOR c_my_cursor IS
          SELECT * 
          FROM my_table;
    
    BEGIN
    
       FOR x IN c_my_c LOOP
           IF x.employeeID IS NULL THEN
              .....
           END IF;
       END LOOP;
    END;
    
        3
  •  0
  •   Aaron Bertrand    17 年前

    如果您不在SQL Server 2008上(您可以使用 table-valued parameters 然后,您可以从Erland的伟大文章中获得一些其他的方法来在存储过程之间共享数据:

    http://www.sommarskog.se/share_data.html

    erland还谈到了表值参数,并深入解释了为什么当前的实现(只读)不够好:

    http://www.sommarskog.se/tableparam.html