是否可以在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
答案 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)
表值参数只能用于输入,不能用于输出。
根据您的最终目标,以下是一些选项:
将sproc更改为表值函数以返回TABLE,然后可以在另一个语句中内联使用
只需从您的sproc末尾的@TSV表var中选择数据
返回一个XML OUTPUT参数(得到一个肮脏的感觉暗示这一点,但只是突出显示一种实际使用OUTPUT参数返回多行的方法)
如果您使用表值函数,理想情况下如果它看起来很简单,则创建一个内联函数:
e.g。
CREATE FUNCTION dbo.Func()
RETURNS TABLE
AS
RETURN
(
SELECT Something
FROM Somewhere
WHERE x = 1
)