1

我已经开始阅读关于表值参数的注释

这些TVP可以作为输入参数和输出参数吗?
将它们作为输出参数有什么意义吗?
我觉得可能有一个 TVP 作为一个存储过程的输出,然后再输入另一个存储过程 - 可能吗?
调用第一个存储过程然后使用第一个存储过程的输出 TVP 调用第二个存储过程的脚本的语法是我不确定的一点。

编辑

为我的帖子的混乱道歉-似乎初始程序结果需要进入 TVP-我认为 TVP 需要参与该存储过程中。所以我所说的一个模型如下 - 希望是 TVP 的有效使用......

CREATE TYPE myfirstTVP AS TABLE (id INT NOT NULL PRIMARY KEY);

GO --<<this sproc will find the ids (+ other fields) that need to be investigated
    CREATE PROC test1 as
        SELECT 1 UNION 
        SELECT 2 UNION
        SELECT 3;
GO

GO --<<this sproc uses the found ids to do one aspect of the investigation
    CREATE PROC test2 
    @t2 myfirstTVP READONLY 
    AS
            SELECT id*2 
            FROM @t2;
GO

GO --<<this sproc uses the found ids to do another aspect of the investigation
    CREATE PROC test3 
    @t4 myfirstTVP READONLY 
    AS
            SELECT id*3 
            FROM @t4;
GO    

    --<<this is where the TVP is used and the sprocs are called 
    DECLARE @t3 myfirstTVP ;
    INSERT INTO @t3 
    EXEC test1;

    EXEC test2 @t3;
    EXEC test3 @t3;
4

2 回答 2

2

我不是 100% 确定你想要实现什么,但你可以在某种意义上模拟“输出”参数的行为,

CREATE TYPE LIST_OF_INT AS TABLE (id int not null primary key);
GO
create procedure test1 as
begin
  declare @t1 LIST_OF_INT;
  insert into @t1 (id) values (1);
  select * from @t1;
end;

GO

declare @t2 LIST_OF_INT ;
insert into @t2 
EXEC test1;

select * from @t2;
于 2012-09-17T15:06:59.400 回答
1

我认为您从引用的 MSDN 链接中错过了这一点。

表值参数必须作为输入 READONLY 参数传递给 Transact-SQL 例程。

于 2012-09-17T14:58:54.450 回答