2

在这里和网上做了一些研究后,我不知道这是否可能。我想要做的是调用一个存储过程,它有几个参数,其中一个是表值参数。

这是我的存储过程片段:

    ALTER PROCEDURE [dbo].[procName]
@Action nvarchar(10) = 'view'
,@var1 int = 0
,@var2 int = 0
,@var3 myType ReadOnly

我现在有另一个过程(proc2),它具有以下几行:

    insert into @varX
    select top 5
        field1, field2
    from
        sourceTable
print 'Processing from table values...'
exec dbo.procName  'refresh', -1, 0, @varX

请注意,varX 和 var3 属于同一类型 MyType 当我执行 proc2 时,我收到错误,我为 dbo.procName 指定了太多参数

我当时认为不可能为存储过程指定多个参数,包括表值参数。我现在倾向于将我的 procName 定义更改为只有一个参数(正如所有在线示例似乎都有),并让我的表值参数充当参数值数组,包括我在我的信息上一个 select 语句(在 proc2 中)。但是,如果可以进行此调用,请说明如何进行。

谢谢

4

1 回答 1

0

这为我编译并运行:

create type TT as table (ID int not null);
go
create procedure P1
    @Val1 int,
    @Val2 TT readonly,
    @Val3 int
as
    select @Val1 as Val1,ID,@Val3
    from @Val2;
go
create procedure P2
as
    declare @T TT;
    insert into @T(ID) values (1),(2)

    exec P1 10,@T,13
go
exec P2

结果:

Val1        ID          
----------- ----------- -----------
10          1           13
10          2           13

所以,我不知道你的问题是什么,但它不能混合表格和非表格参数。

于 2013-01-09T07:42:36.273 回答