在 SQL 中返回或输出 @tableVariable
Posted
技术标签:
【中文标题】在 SQL 中返回或输出 @tableVariable【英文标题】:Returning or outputting a @tableVariable in SQL 【发布时间】:2012-11-30 11:12:03 【问题描述】:是否可以在 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
【问题讨论】:
【参考方案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 真的像您展示的那样简单,请将其转换为表值函数。
【讨论】:
【参考方案2】:不,但你可以写一个 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
【讨论】:
【参考方案3】:表值参数只能用于输入,不能用于输出。
根据您的最终目标,这里有一些选项:
将存储过程更改为表值函数以返回 TABLE,然后可以在另一个语句中内联使用它
只需从 sproc 末尾的 @TSV 表 var 中选择数据
返回一个 XML OUTPUT 参数(得到一个肮脏的感觉,建议这样做,但只是强调一种实际使用 OUTPUT 参数返回多行的方法)
如果您选择表值函数,最好创建一个内联函数,前提是它看起来很简单:
例如
CREATE FUNCTION dbo.Func()
RETURNS TABLE
AS
RETURN
(
SELECT Something
FROM Somewhere
WHERE x = 1
)
【讨论】:
以上是关于在 SQL 中返回或输出 @tableVariable的主要内容,如果未能解决你的问题,请参考以下文章