इस काम को करने के लिए आपके पास दो विकल्प हैं। या तो आप एकल परिणाम सेट का उपयोग कर सकते हैं या आप OUTPUT पैरामीटर का उपयोग कर सकते हैं। आप वर्तमान में न तो सही तरीके से उपयोग कर रहे हैं।
OUTPUT पैरामीटर
आपकी संग्रहीत प्रक्रिया को @OrderCount
एक दिशा के साथ एक पैरामीटर होने के रूप में परिभाषित किया गया हैOUTPUT
यदि आप किसी उपकरण, SSMS, .NET, के भीतर संग्रहीत कार्यविधि का उपयोग करना चाहते हैं, जो भी हो, यह कुछ इस तरह दिखेगा
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
यह निर्दिष्ट किए बिना ऊपर चलाने के लिए वैध है OUTPUT
लेकिन @ऑर्डरकाउंट के मूल्य को देखें। यह 1435 से 0 तक बदलता है।
जब आप SSIS के भीतर Execute SQL टास्क का उपयोग कर रहे हों, तो यह सही है। आपको यह निर्दिष्ट करना होगा कि पैरामीटर OUTPUT पर है और इसे पैरामीटर मैपिंग टैब में भी निर्दिष्ट करें।
उस चर को भी निर्दिष्ट करें जिसे आप मैप करना चाहते हैं और वहां पर OUTPUT दिशा का उपयोग करें। यहाँ मैंने परिणाम का SSIS चर में टाइप किया गया है Int32 प्रकारorderCount
एकल परिणाम सेट
आपके पास इस सही का पहला भाग है - आपने निर्दिष्ट किया है कि परिणाम सेट एकल पंक्ति है।
आप ध्यान देंगे कि मैं इसका उपयोग कर रहा हूं EXECUTE dbo.TestStoredProcSSVariable ?
क्योंकि आपको इनपुट मूल्य निर्दिष्ट करना होगा या खरीद कॉल टूट जाएगी (कम से कम जैसा आपने इसे परिभाषित किया है)। आप कठिन के एवज में एक मूल्य कोडित किया जा सकता था ?
की तरह0
फिर, रिजल्ट सेट टैब पर, यहां मैं पहला कॉलम (ज़ीरोथ ऑर्डिनल) एक वैरिएबल नामक मैपिंग कर रहा हूं orderCountb
यदि आप प्रदान की गई संग्रहीत कार्यविधि चलाते हैं, तो आपको ऑर्डरकाउंट में मान नहीं मिलेगा। क्यों? क्योंकि आप संग्रहीत कार्यविधि कॉल से कुछ भी नहीं लौटा रहे हैं। मैंने संग्रहीत प्रक्रिया के अंदर एक अंतिम विवरण जोड़ा
SELECT @OrderCount AS OrderCount;
यह स्वयं करो
आप निम्नलिखित biml का उपयोग करके या तो दृष्टिकोण का पता लगा सकते हैं। बिमल क्या है? बिजनेस इंटेलिजेंस मार्कअप लैंग्वेज BI के लिए ऑपरेटिंग सिस्टम है। आप इसकी परवाह क्यों करते हैं कि यह आपको कुछ XML को SSIS पैकेज में बदलने की अनुमति देगा। तुम सब करने की जरूरत है डाउनलोड और मुफ्त एडोन BIDS हेल्पर स्थापित किया है
BIDS हेल्पर को स्थापित करने के बाद,
- प्रोजेक्ट पर राइट क्लिक करें और Add New 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]