Bạn có hai lựa chọn để thực hiện công việc này. Bạn có thể sử dụng Tập kết quả đơn hoặc bạn có thể sử dụng tham số OUTPUT. Bạn hiện đang sử dụng không chính xác.
Tham số OUTPUT
Quy trình được lưu trữ của bạn được định nghĩa là có tham số @OrderCount
theo hướngOUTPUT
Nếu bạn muốn sử dụng thủ tục được lưu trữ trong một công cụ, SSMS, .NET, bất cứ điều gì, nó sẽ trông giống như
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
Nó là hợp lệ để chạy ở trên mà không chỉ định OUTPUT
nhưng nhìn vào giá trị của @orderCount. Nó thay đổi từ 1435 thành 0.
Điều tương tự cũng đúng khi bạn đang sử dụng Tác vụ SQL thực thi trong SSIS. Bạn phải xác định rằng tham số nằm trên OUTPUT và cũng chỉ định tham số đó trong tab Ánh xạ tham số.
Đồng thời chỉ định biến bạn muốn ánh xạ và sử dụng hướng OUTPUT ở đó. Ở đây tôi đã ánh xạ kết quả vào Biến SSIS loại Int32 được gọiorderCount
Tập kết quả duy nhất
Bạn có phần đầu tiên của chính xác này - bạn đã chỉ định rằng tập kết quả là Hàng đơn.
Bạn sẽ lưu ý rằng tôi đang sử dụng EXECUTE dbo.TestStoredProcSSVariable ?
vì bạn phải chỉ định giá trị đầu vào hoặc cuộc gọi Proc sẽ bị ngắt (ít nhất là như bạn đã xác định). Bạn có thể đã mã hóa một giá trị thay cho ?
tương tự0
Sau đó, trên tab Kết quả, ở đây tôi đang ánh xạ cột đầu tiên (thứ tự zeroth) thành Biến được gọi orderCountb
Nếu bạn chạy thủ tục được lưu trữ được cung cấp, bạn sẽ không nhận được giá trị trong orderCountb. Tại sao? Bởi vì bạn không trả lại bất cứ điều gì từ cuộc gọi thủ tục được lưu trữ. Tôi đã thêm một tuyên bố cuối cùng bên trong thủ tục lưu trữ của
SELECT @OrderCount AS OrderCount;
Tự làm
Bạn có thể khám phá một trong hai cách tiếp cận bằng cách sử dụng biml sau đây. Biml là gì? Ngôn ngữ đánh dấu thông minh nghiệp vụ là hệ điều hành cho BI. Tại sao bạn quan tâm đến nó là nó sẽ cho phép bạn chuyển đổi một số XML thành gói SSIS. Tất cả những gì bạn cần làm là tải xuống và cài đặt Trình trợ giúp BIDS miễn phí
Sau khi cài đặt BIDS Helper,
- Nhấp chuột phải vào dự án và chọn Thêm tệp Biml mới
- thay thế nội dung của tệp bằng XML sau
- Khắc phục các giá trị trong dòng 5. Cập nhật
Data Source
lên máy chủ thực và Provider
căn chỉnh với phiên bản SSIS của bạn. Nhìn vào ảnh chụp màn hình của bạn, đây có thể sẽ là SQLNCLI10.1
- Nhấp chuột phải vào BimlScript.biml và chọn Tạo gói SSIS
Bimlscript.biml
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection
Name="tempdb"
ConnectionString="Data Source=.\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;"
/>
</Connections>
<Packages>
<Package
Name="dba_114775"
ConstraintMode="Linear"
>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Make procedure">
<DirectInput>
<![CDATA[IF EXISTS
(
SELECT
*
FROM
sys.procedures AS P
INNER JOIN
sys.schemas AS S
ON S.schema_id = P.schema_id
WHERE
S.name = 'dbo'
AND P.name = 'TestStoredProcSSVariable'
)
BEGIN
DROP PROCEDURE dbo.TestStoredProcSSVariable
END
GO
CREATE PROCEDURE dbo.TestStoredProcSSVariable
(
@OrderCount int OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
SET @OrderCount = 1135;
SELECT @OrderCount AS OrderCount;
END
GO
]]>
</DirectInput>
</ExecuteSQL>
<Container Name="SEQC Result set" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
ResultSet="SingleRow"
Name="SQL SingleRow">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ?;</DirectInput>
<Results>
<Result VariableName="User.orderCountb" Name="0" />
</Results>
<Parameters>
<Parameter DataType="Int32" VariableName="User.orderCountb" Name="0" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<Container Name="SEQC Output Parameter" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Output parameter">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ? OUTPUT;</DirectInput>
<Parameters>
<Parameter
DataType="Int32"
VariableName="User.orderCount"
Name="0"
Direction="Output" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SEQC Result set.Output" />
<Input OutputPathName="SEQC Output Parameter.Output" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
<Variables>
<Variable DataType="Int32" Name="orderCount">-1</Variable>
<Variable DataType="Int32" Name="orderCountb">-1</Variable>
</Variables>
</Package>
</Packages>
</Biml>
Tận hưởng gói SSIS sau
@[User::orderCount]