1

是否可以在 SQL Server 中返回或输出 @tableVariable?
例如对于以下存储过程,如何返回 @TSV 表变量?

ALTER PROCEDURE MyStoredProdecure
    @Parameter1 INT,
    @Parameter2 INT
AS
   BEGIN

   DECLARE @TSV TABLE
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

   INSERT INTO @TSV
   { some data }

END
4

3 回答 3

1

你不能直接这样做。表变量对 READONLY 输入有效。

如果您没有从存储过程返回其他数据,您可以在最后从@TSV 中选择并让调用者捕获输出,例如

ALTER PROCEDURE MyStoredProdecure
    @Parameter1 INT,
    @Parameter2 INT
AS
   BEGIN

   DECLARE @TSV TABLE
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

   INSERT INTO @TSV
   { some data }

   SELECT * FROM @TSV
END

呼叫者

DECLARE @outerTSV TABLE
(
   Transition_Set_Variable_ID INT,
   Passed BIT
);
insert into @outerTSV
exec MyStoredProdecure 1, 2;

或者,如果 SP 真的像您展示的那样简单,请将其转换为表值函数。

于 2012-11-30T11:12:56.130 回答
1

不,但是您可以编写一个table valued function返回表的。

create function MyTVF
    @Parameter1 INT,
    @Parameter2 INT
returns @tsv table
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

AS
   BEGIN
   INSERT INTO @TSV
   { some data }
   return 
END
于 2012-11-30T11:15:54.623 回答
1

表值参数只能用于输入,不能用于输出。

根据您的最终目标,这里有一些选项:

  1. 将存储过程更改为表值函数以返回表,然后可以在另一个语句中内联使用

  2. 只需从 sproc 末尾的 @TSV 表 var 中选择数据

  3. 返回一个 XML OUTPUT 参数(得到一种肮脏的感觉,建议这样做,但只是为了强调一种实际使用 OUTPUT 参数返回多行的方法)

如果您选择表值函数,理想情况下创建一个内联函数,如果它在您的情况下看起来很简单:

例如

CREATE FUNCTION dbo.Func() 
RETURNS TABLE 
AS
RETURN
(
    SELECT Something
    FROM Somewhere
    WHERE x = 1
)
于 2012-11-30T11:16:31.037 回答