我可以在执行storedproc时将表作为参数传递吗?

时间:2009-10-28 07:33:46

标签: sql sql-server-2005 stored-procedures

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

请帮忙。

3 个答案:

答案 0 :(得分:1)

在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

答案 1 :(得分:0)

在Oracle中,您可以使用TYPES和OBJECTS来实现此IIRC。你能不能使用CURSOR / LOOP吗?如果您这样做的原因是捕获动态数据?

   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;

答案 2 :(得分:0)

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

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

Erland也讨论了表值参数,并深入解释了为什么当前的实现(只读)不够好:

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