Theo hiểu biết của tôi; những gì tôi muốn làm là không thể trong sql, nhưng nó là giá trị yêu cầu các bạn.Quy trình lưu trữ Exec vào bảng tạm thời động
Cho phép nói rằng tôi có một thủ tục được lưu trữ abc trả về cột Id và Giá trị. Thủ tục lưu trữ này chủ yếu được sử dụng bởi các bộ phận khác vì lý do chức năng và tôi sẽ chỉ sử dụng nó mỗi lần và một lần nữa để kiểm tra dữ liệu.
Vì vậy, sử dụng nó như một phần của thủ tục lưu trữ của tôi:
DECLARE @tABC TABLE
(
ID INT,
Value DECIMAL(12,2)
)
INSERT INTO @tABC
EXEC OtherDb.DataProd.abc
Oky vì vậy đây sẽ làm việc một cách hoàn hảo cho bây giờ, nhưng những gì nếu họ thay đổi cấu trúc của thủ tục lưu trữ của họ?
Việc thêm hoặc xóa cột khỏi quy trình được lưu trữ của chúng sẽ phá vỡ mã của tôi, vì vậy có cách làm cho mã của tôi linh hoạt hơn.
nỗ lực tuyệt vọng cuối cùng của tôi đã đi một cái gì đó như thế này:
WITH tempTable AS
(
EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable
Mà rõ ràng thất bại thảm hại.
Đó là lý do tại sao bạn nên sử dụng các hàm có giá trị bảng hoặc biến bảng thay vì các thủ tục được lưu trữ để trả về bảng. Dù sao, OPENROWSET có thể là một giải pháp cho bạn – adrianm
@adrianm Nhận xét của bạn về UDF thực sự đã giải quyết được vấn đề của tôi. Tôi không thể tin rằng tôi đã không thấy điều đó trước đây. – JAT
có thể trùng lặp của [Chèn kết quả của một thủ tục được lưu trữ vào một bảng tạm thời] (http://stackoverflow.com/questions/653714/insert-results-of-a-stored-procedure-into-a-temporary-table) –