Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để lấy nhiều đầu ra từ một thủ tục được lưu trữ vào bảng tạm thời

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các bản ghi có 3 hoặc nhiều bản ghi liên tiếp có cùng giá trị

  2. Làm thế nào để viết một foreach trong SQL Server?

  3. Giá trị thập phân trong SQL để chia kết quả

  4. Cách tốt nhất để tạo chỉ mục trong SQL Server

  5. Có thể truy cập cơ sở dữ liệu .mdf mà không có SQL Server không?