2009-01-28 27 views
7

Tôi đang di chuyển dữ liệu phải được chèn bằng các thủ tục đã lưu trữ đã tồn tại. Các thủ tục được lưu trữ có các tham số và một giá trị trả về (từ một câu lệnh chọn) của một id cho hàng được chèn vào. Trong một lệnh OLE DB trong SSIS, tôi có thể gọi thủ tục lưu trữ truyền các giá trị cột như các tham số và tôi thường sử dụng các tham số đầu ra trên thủ tục lưu sẵn để xử lý đầu ra "id"; nhưng tôi không chắc chắn làm thế nào điều này có thể được xử lý với các giá trị trả về khi thủ tục sử dụng một lựa chọn để trả về giá trị id. Dưới đây là một ví dụ về những gì tôi đã sử dụng trước đó làm việc nhưng tôi cần phải nhận giá trị trả về từ chọn:Giá trị trả về SSIS của các thủ tục được lưu trữ trong một lệnh OLE DB

exec dbo.uspInsertContactAddress 
@Address = ?, 
@ContactID = ?, 
@DeliveryMethodId = ?, 
@ID = ? output, 
@Version = ? output 

Trả lời

12

Con đường tôi thấy tôi có thể làm điều này mà đã thực sự khá đơn giản:

exec ? = dbo.StoredProc @param = ?, @param2 = ? 

và sau đó một @RETURN_VALUE sẽ xuất hiện trên cột Destination sẵn

6

Không sử dụng tên biến trong các tài sản SqlCommand, chỉ là dấu hỏi và Nhãn "OUT" hoặc "OUTPUT" cho các tham số đầu ra.

Bí quyết lấy giá trị tham số đầu ra là đặt biến đổi cột dẫn xuất trong đường dẫn trước lệnh OLE DB để giới thiệu một cột (ánh xạ tới biến SSIS) để nắm bắt kết quả thủ tục.

Xem OLEDB Command Transformation And Identity Columns để có cái nhìn tổng quan tốt với nắp màn hình về cách thực hiện việc này. Ngoài ra, hãy xem Trash Destination Adapter cho Điểm đến Thùng rác được sử dụng trong liên kết đầu tiên. Đó là một công cụ hữu ích để có sẵn để gỡ lỗi những thứ như thế này.

+0

Cảm ơn cho câu trả lời, mặc dù có lẽ tôi đã không' t giải thích trong câu hỏi của tôi chính xác những gì tôi cần làm. Đoạn mã trên tôi đã sử dụng các công trình và tôi có thể lấy các giá trị nếu thủ tục có tham số đầu ra. Vấn đề là các thủ tục được sử dụng cho cơ sở dữ liệu này chỉ cần gọi một lựa chọn để có được một giá trị. – bobwah

+0

Tôi xin lỗi, tôi không chắc mình đang gặp phải vấn đề là gì. Có phải là bạn không vượt qua kết quả của việc chọn ra thông qua một tham số đầu ra và thay vào đó bạn cần một cách để lấy tập kết quả của proc? –

0

Tôi đã luôn sử dụng ánh xạ tham số trong Thực thi nhiệm vụ SQL với rất nhiều thành công. Câu lệnh SQL là "EXEC nameofstoredproc?,? OUTPUT", với dấu hỏi chỉ định vị trí của các tham số và OUTPUT nếu tham số là đầu ra.

Bạn chỉ định tham số trong ánh xạ với tên biến thích hợp, hướng (đầu vào, đầu ra, ReturnValue) và loại dữ liệu. Vì proc được lưu trữ của bạn trả về dữ liệu bạn muốn thông qua tập kết quả, sau đó chỉ định hướng cho các biến để thu thập ID và phiên bản là ReturnValue. Nó sẽ làm việc tốt cho bạn.

1

Nếu stored procedure trả về một resultset, sau đó bạn cần phải nắm bắt nó:

DECLARE @results TABLE (
    [ID] INT NOT NULL 
) 

INSERT @results ([ID]) 
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output 

SELECT * FROM @results 

Lưu ý: Tôi sử dụng một biến TABLE. Bạn có thể cần phải sử dụng một bảng tạm thời tùy thuộc vào phiên bản SQL Server của bạn.

Các vấn đề liên quan