Đây là một bài viết cũ hơn, nhưng nó ở gần đầu khi tôi đang tìm kiếm "Tham số có giá trị bảng làm tham số đầu ra cho thủ tục được lưu trữ". Theo hiểu biết của tôi rằng bạn không thể truyền tham số có giá trị bảng làm tham số đầu ra, tôi sẽ tưởng tượng mục tiêu là sử dụng tham số đầu ra có giá trị bảng đó làm tham số đầu vào có giá trị bảng trong quy trình khác. Tôi sẽ đưa ra một ví dụ cho cách tôi thực hiện công việc này.
Đầu tiên, tạo một số dữ liệu để làm việc với:
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' )
;
Tiếp theo, tạo một thủ tục được lưu trữ để nắm bắt một số dữ liệu. Thông thường, đây sẽ là nơi bạn đang cố gắng tạo một tham số đầu ra có giá trị bảng.
create procedure usp_OUTPUT1
@gender varchar(10)
as
Begin
select id from tbl1 where gender = @gender
End
Ngoài ra, bạn sẽ muốn tạo một kiểu dữ liệu (kiểu bảng) trong đó dữ liệu từ thủ tục được lưu trữ đầu tiên có thể được chuyển qua làm tham số đầu vào cho thủ tục được lưu trữ tiếp theo.
create type tblType as Table (id int)
Tiếp theo, tạo thủ tục được lưu trữ thứ hai sẽ chấp nhận tham số có giá trị bảng.
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
Cấp, đây không phải là một tham số đầu ra có giá trị bảng thực sự, nhưng nó có thể sẽ tạo ra kết quả tương tự như những gì bạn sẽ tìm kiếm. Khai báo tham số có giá trị bảng của bạn, điền dữ liệu vào nó bằng cách thực hiện thủ tục được lưu trữ vào nó, sau đó sử dụng nó làm biến đầu vào cho thủ tục tiếp theo.
Declare @tblType tblType
insert into @tblType execute usp_OUTPUT1 'm'
execute usp_OUTPUT2 @tblType