संग्रहीत कार्यविधि को SSIS चर के लिए परिणाम


9

मैं एक संग्रहीत प्रक्रिया से एक SSIS चर में मान प्राप्त करने की कोशिश कर रहा हूं, और फिर यह देखने के लिए परीक्षण कर रहा हूं कि क्या मैंने एक अभिव्यक्ति को जोड़ा तो दो SSIS कार्य कर सकते हैं। इसलिए एक उदाहरण के लिए, मैं इस संग्रहीत प्रक्रिया का उपयोग करने की कोशिश कर रहा हूं :

यहां छवि विवरण दर्ज करें

हो सकता है कि मैं SSIS वैरिएबल प्रॉपर्टीज को भी पूरी तरह से गलत ठहरा रहा हूं, क्योंकि मुझे भी यकीन नहीं है कि मैं SSIS वैरिएबल में इंपोर्ट होने के लिए स्टोर किए गए प्राइज वैल्यू का सही तरीका है। कृपया मुझे बताएं कि क्या आपको किसी और चीज़ के किसी और पेंचकस की आवश्यकता है।

यहाँ कार्य उदाहरण है:

यहां छवि विवरण दर्ज करें

और यहाँ पूर्वधारणा बाधा संपादक पेंचकप है:

यहां छवि विवरण दर्ज करें

और यहाँ पहले कार्य के लिए गुण हैं:

यहां छवि विवरण दर्ज करें

मैं चाहता हूं कि यह उस स्थिति के आधार पर आगे (या विफल) हो जाए। लेकिन जब मैं इसका परीक्षण करता हूं, तो यह प्रक्रिया पहले कार्य से दूसरे तक की परवाह किए बिना बहती है, और केवल मुझे पहले कार्य के लिए "100% पूर्ण" दिखाती है और इस अभिव्यक्ति को सही होने या न होने के बारे में कुछ भी नहीं बताती है। मैं ऐसा कैसे कर सकता हूं और क्या गलत हो रहा है? मेरे पास SSIS का एक वैरिएबल है जिसे 'orderCount' कहा जाता है ताकि संग्रहित खरीद से मूल्य प्राप्त किया जा सके।


1
अपने पहले एक्सेक्यूट एसक्यूएल कार्य में, आपको संग्रहित प्रक्रिया के आउटपुट को वापस करने की आवश्यकता है@[User::orderCount]
मार्क सिंकिन्सन

क्या यह उस खिड़की में कहीं जाएगा? (अंतिम छवि मैंने सिर्फ एक पोस्ट एडिट के रूप में जोड़ी है)
रवि

1
क्षमा करें, Result Setपृष्ठ पर। simple-talk.com/sql/ssis/…
मार्क सिंकिन्सन

बहुत बहुत धन्यवाद, यह किया! यह पहला कार्य पास करता है और दूसरा आगे बढ़ता है। मैं चाहता हूं कि मैं उस अभिव्यक्ति के कारण आगे न बढ़ूं, जो यह कहने की कोशिश कर रहा है कि "यदि उस चर के लिए दिया गया मान 5 से कम है, तो अगला कार्य न करें"।
रवि

@ जयवंत दूसरे कार्य पर, "अक्षम" संपत्ति के लिए एक अभिव्यक्ति सेट करने का प्रयास करें जैसे कुछ @[User::orderCount]<5?(dt_bool)1:(dt_bool)0। अगर यह सक्सेसफुल है तो इस थ्रेड पर वापस परिणाम पोस्ट करना न भूलें। जीएल!
पीटर वांडिवियर

जवाबों:


10

इस काम को करने के लिए आपके पास दो विकल्प हैं। या तो आप एकल परिणाम सेट का उपयोग कर सकते हैं या आप 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 क्लॉज़ और पैरामीटर स्थान धारक निर्दिष्ट करें

उस चर को भी निर्दिष्ट करें जिसे आप मैप करना चाहते हैं और वहां पर OUTPUT दिशा का उपयोग करें। यहाँ मैंने परिणाम का SSIS चर में टाइप किया गया है Int32 प्रकारorderCount

यहां छवि विवरण दर्ज करें

एकल परिणाम सेट

आपके पास इस सही का पहला भाग है - आपने निर्दिष्ट किया है कि परिणाम सेट एकल पंक्ति है।

आप ध्यान देंगे कि मैं इसका उपयोग कर रहा हूं EXECUTE dbo.TestStoredProcSSVariable ?क्योंकि आपको इनपुट मूल्य निर्दिष्ट करना होगा या खरीद कॉल टूट जाएगी (कम से कम जैसा आपने इसे परिभाषित किया है)। आप कठिन के एवज में एक मूल्य कोडित किया जा सकता था ?की तरह0

यहां छवि विवरण दर्ज करें

फिर, रिजल्ट सेट टैब पर, यहां मैं पहला कॉलम (ज़ीरोथ ऑर्डिनल) एक वैरिएबल नामक मैपिंग कर रहा हूं orderCountb

यहां छवि विवरण दर्ज करें

यदि आप प्रदान की गई संग्रहीत कार्यविधि चलाते हैं, तो आपको ऑर्डरकाउंट में मान नहीं मिलेगा। क्यों? क्योंकि आप संग्रहीत कार्यविधि कॉल से कुछ भी नहीं लौटा रहे हैं। मैंने संग्रहीत प्रक्रिया के अंदर एक अंतिम विवरण जोड़ा

SELECT @OrderCount AS OrderCount;

यह स्वयं करो

आप निम्नलिखित biml का उपयोग करके या तो दृष्टिकोण का पता लगा सकते हैं। बिमल क्या है? बिजनेस इंटेलिजेंस मार्कअप लैंग्वेज BI के लिए ऑपरेटिंग सिस्टम है। आप इसकी परवाह क्यों करते हैं कि यह आपको कुछ XML को SSIS पैकेज में बदलने की अनुमति देगा। तुम सब करने की जरूरत है डाउनलोड और मुफ्त एडोन BIDS हेल्पर स्थापित किया है

BIDS हेल्पर को स्थापित करने के बाद,

  1. प्रोजेक्ट पर राइट क्लिक करें और Add New Biml फ़ाइल चुनें
  2. निम्न XML के साथ फ़ाइल की सामग्री को बदलें
  3. मानों को पंक्ति 5 में ठीक करें। Data Sourceवास्तविक सर्वर पर अपडेट करें और Providerअपने SSIS संस्करण के साथ संरेखित करें। अपने स्क्रीनशॉट को देखते हुए, यह SQLNCLI10.1 होगा
  4. 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] &lt; 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] &lt; 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 पैकेज का आनंद लें

यहां छवि विवरण दर्ज करें


यह अविश्वसनीय रूप से उपयोगी और जानकारीपूर्ण था, बहुत बहुत धन्यवाद, बिलिंक! बेहद मददगार पोस्ट! आपका बहुत बहुत धन्यवाद!
रवि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.