在SQL中返回或输出@tableVariable

时间:2012-11-30 11:12:03

标签: sql sql-server output table-variable

是否可以在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

3 个答案:

答案 0 :(得分: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非常简单,请将其转换为表值函数。

答案 1 :(得分: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

答案 2 :(得分:1)

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

根据您的最终目标,以下是一些选项:

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

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

  3. 返回一个XML OUTPUT参数(得到一个肮脏的感觉暗示这一点,但只是突出显示一种实际使用OUTPUT参数返回多行的方法)

  4. 如果您使用表值函数,理想情况下如果它看起来很简单,则创建一个内联函数:

    e.g。

    CREATE FUNCTION dbo.Func() 
    RETURNS TABLE 
    AS
    RETURN
    (
        SELECT Something
        FROM Somewhere
        WHERE x = 1
    )