Bạn không thể không sửa đổi quy trình đã lưu trữ.
Trong SQL Server, bạn chỉ có thể chèn tập hợp kết quả đầu tiên của một thủ tục được lưu trữ vào một bảng khác, thông qua INSERT...EXEC
. Số lượng cột và vị trí phải khớp chính xác và INSERT...EXEC
không thể được lồng vào nhau, tức là bạn không thể chèn từ proc1 vào một bảng trong proc2, và sau đó chèn từ proc2 vào một bảng trong proc3. Vì vậy, INSERT...EXEC
là một giải pháp hoàn toàn không hài lòng.
Cách giải quyết là sửa đổi thủ tục để chèn kết quả vào các bảng tạm thời được xác định trong phạm vi gọi, ví dụ:
create proc get_some_data as
insert #temp1 (col1, col2) select col1, col2 from table1
insert #temp2 (colA, colB) select colA, colB from table2
go
create table #temp1 (col1 int, col2 int)
create table #temp2 (colA int, colB int)
exec get_some_data
select * from #temp1
select * from #temp2
drop table #temp1
drop table #temp2
go
Nếu bạn không thể sửa đổi quy trình, bạn không gặp may. CHỈNH SỬA :như HABO vui lòng chỉ ra, bạn có thể sử dụng CLR để lặp lại các tập kết quả. Xem liên kết bên dưới để biết chi tiết. Không quá tệ nếu bạn biết mình đang làm gì và không có lựa chọn nào khác.
Để biết thêm chi tiết về việc chia sẻ dữ liệu giữa các quy trình được lưu trữ, hãy xem bài viết rất toàn diện này của Erland Sommarskog: http:// www.sommarskog.se/share_data.html