คุณมีสองทางเลือกในการทำงานนี้ คุณสามารถใช้ชุดผลลัพธ์เดียวหรือคุณสามารถใช้พารามิเตอร์ OUTPUT คุณใช้ไม่ถูกต้องในขณะนี้
พารามิเตอร์ OUTPUT
กระบวนงานที่เก็บไว้ของคุณถูกกำหนดว่ามีพารามิเตอร์@OrderCount
พร้อมทิศทางOUTPUT
หากคุณต้องการใช้โพรซีเดอร์ที่เก็บไว้ภายในเครื่องมือ SSMS, .NET ไม่ว่ามันจะเป็นอย่างไร
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
สามารถเรียกใช้ข้างต้นได้โดยไม่ต้องระบุOUTPUT
แต่ดูค่าของ @orderCount มันเปลี่ยนจาก 1435 เป็น 0
สิ่งนี้ยังคงเป็นจริงเมื่อคุณใช้ Execute SQL Task ภายใน SSIS คุณต้องระบุว่าพารามิเตอร์อยู่ใน OUTPUT และระบุไว้ในแท็บการแมปพารามิเตอร์
ระบุตัวแปรที่คุณต้องการแมปและใช้ทิศทาง OUTPUT ที่นั่น ที่นี่ฉันได้แมปผลลัพธ์ลงใน SSIS Variable ของประเภท Int32 ที่เรียกว่าorderCount
ชุดผลลัพธ์เดี่ยว
คุณมีส่วนแรกของการแก้ไขนี้ - คุณระบุว่าชุดผลลัพธ์คือแถวเดี่ยว
คุณจะทราบว่าฉันกำลังใช้EXECUTE dbo.TestStoredProcSSVariable ?
ในขณะที่คุณต้องระบุค่าการป้อนข้อมูลหรือโทร proc จะแตก (อย่างน้อยก็ตามที่คุณได้กำหนดไว้) คุณอาจจะได้เขียนยากค่าแทนของ?
เช่น0
จากนั้นบนแท็บชุดผลลัพธ์ที่นี่ฉันกำลังทำแผนที่คอลัมน์แรก (ลำดับเลขศูนย์) กับตัวแปรที่เรียกว่า orderCountb
ถ้าคุณเรียกใช้กระบวนงานที่เก็บไว้ที่ระบุไว้คุณจะไม่ได้รับค่าใน orderCountb ทำไม? เนื่องจากคุณไม่ได้ส่งคืนสิ่งใดจากการเรียกกระบวนงานที่เก็บไว้ ฉันเพิ่มคำแถลงขั้นสุดท้ายภายในกระบวนงานที่เก็บไว้ของ
SELECT @OrderCount AS OrderCount;
ทำด้วยตัวคุณเอง
คุณสามารถสำรวจทั้งสองวิธีโดยใช้ biml ต่อไปนี้ biml คืออะไร Business Markup Language เป็นระบบปฏิบัติการสำหรับ BI ทำไมคุณถึงสนใจว่ามันจะช่วยให้คุณแปลง XML บางส่วนเป็นแพ็คเกจ SSIS สิ่งที่คุณต้องทำคือดาวน์โหลดและติดตั้ง Addon BIDS Helperฟรี
หลังจากติดตั้ง BIDS Helper
- คลิกขวาที่โครงการและเลือกเพิ่มไฟล์ Biml ใหม่
- แทนที่เนื้อหาของไฟล์ด้วย XML ต่อไปนี้
- แก้ไขค่าในบรรทัดที่ 5 อัพเดต
Data Source
เซิร์ฟเวอร์จริงและProvider
เพื่อให้สอดคล้องกับเวอร์ชัน SSIS ของคุณ ดูภาพหน้าจอของคุณซึ่งอาจเป็น SQLNCLI10.1
- คลิกขวาที่ BimlScript.biml และเลือกสร้างแพ็คเกจ 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>
เพลิดเพลินกับแพ็คเกจ SSIS ต่อไปนี้
@[User::orderCount]