To jest starszy post, ale był blisko szczytu, gdy szukałem „Parametru o wartości tabeli jako parametru wyjściowego dla procedury składowanej”. Chociaż rozumiem, że nie można przekazać parametru o wartości tabeli jako parametru wyjściowego, wyobrażam sobie, że celem jest użycie tego parametru o wartości tabeli jako parametru wejściowego o wartości tabeli w innej procedurze. Pokażę przykład, w jaki sposób sprawiłem, że to działa.
Najpierw utwórz dane do pracy:
create table tbl1
(
id int,
fname varchar(10),
gender varchar(10)
);
create table tbl2
(
id int,
lname varchar(10)
);
insert into tbl1
values
(1,'bob' ,'m'),
(2,'tom' ,'m'),
(3,'sally','f')
;
insert into tbl2
values
(1,'jones' ),
(2,'johnson' ),
(3,'smith' )
;
Następnie utwórz procedurę składowaną, aby przechwycić niektóre dane. Zwykle w tym miejscu próbujesz utworzyć parametr wyjściowy o wartości tabeli.
create procedure usp_OUTPUT1
@gender varchar(10)
as
Begin
select id from tbl1 where gender = @gender
End
Ponadto należy utworzyć typ danych (typ tabeli), w którym dane z pierwszej procedury składowanej można przekazać jako parametr wejściowy dla następnej procedury składowanej.
create type tblType as Table (id int)
Następnie utwórz drugą procedurę składowaną, która zaakceptuje parametr wyceniony w tabeli.
create procedure usp_OUTPUT2
@tblType tblType readonly --referencing the type created and specify readonly
as
begin
select lname from tbl2 where id in (select id from @tblType)
end
To prawda, że nie jest to parametr wyjściowy wyceniony w tabeli, ale prawdopodobnie da wyniki podobne do tego, czego byś szukał. Zadeklaruj parametr wyceniony w tabeli, wypełnij go danymi, wykonując w nim procedurę przechowywaną, a następnie użyj go jako zmiennej wejściowej dla następnej procedury.
Declare @tblType tblType
insert into @tblType execute usp_OUTPUT1 'm'
execute usp_OUTPUT2 @tblType