2

こことオンラインでいくつかの調査を行った後、これが可能かどうかについて途方に暮れています。私がやりたいことは、テーブル値パラメーターの 1 つを含む複数のパラメーターを持つストアド プロシージャを呼び出すことです。

これは私のストアド プロシージャのスニペットです。

    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 の定義を 1 つのパラメーター (オンラインのすべての例にあるように) だけを持つように変更し、テーブル値パラメーターをパラメーター値の配列として機能させて、私が持っていた情報を含むようにすることを考えています。前の 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 に答える