এসএসআইএস ভেরিয়েবলের মধ্যে সঞ্চিত প্রক্রিয়া ফলাফলগুলি অর্পণ করা


9

আমি একটি সঞ্চিত পদ্ধতি থেকে একটি এসএসআইএস ভেরিয়েবলের মধ্যে মানটি পাওয়ার চেষ্টা করছি এবং তারপরে যদি আমি কোনও এক্সপ্রেশন যুক্ত করি তবে দুটি এসএসআইএস কাজ করতে পারে কিনা তা পরীক্ষা করে দেখছি। সুতরাং উদাহরণস্বরূপ, আমি এই সঞ্চিত পদ্ধতিটি ব্যবহার করার চেষ্টা করছি :

এখানে চিত্র বর্ণনা লিখুন

সম্ভবত আমি এমনকি এসএসআইএস ভেরিয়েবল বৈশিষ্ট্যগুলি সম্পূর্ণরূপে সেট আপ করছি, কারণ আমিও নিশ্চিত নই যে আমি এসএসআইএস ভেরিয়েবলের মধ্যে আমদানি করার জন্য সঞ্চিত প্রকল্পের মানটি সঠিকভাবে করছি কিনা। আপনার যদি অন্য কোনও স্ক্রিনক্যাপ দরকার হয় তবে আমাকে বলবেন tell

এখানে টাস্কের উদাহরণ দেওয়া হল:

এখানে চিত্র বর্ণনা লিখুন

এবং এখানে অগ্রাধিকার সীমাবদ্ধ সম্পাদক স্ক্রিনক্যাপ রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

এবং এখানে প্রথম কাজের জন্য বৈশিষ্ট্যগুলি রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

আমি চাই এই শর্তের ভিত্তিতে এটি এগিয়ে যেতে (বা ব্যর্থ)। তবে যখন আমি এটি পরীক্ষা করি, প্রক্রিয়াটি নির্বিশেষে প্রথম কাজ থেকে দ্বিতীয় দিকে চলে যায় এবং কেবল প্রথম কাজের জন্য আমাকে "100% সম্পূর্ণ" দেখায় এবং এটি এই অভিব্যক্তিটি সত্য কিনা বা না তা যাচাই করেছে কিনা সে সম্পর্কে কিছুই দেখায় না। আমি কীভাবে এই জাতীয় জিনিসটি করতে পারি এবং কী ভুল হচ্ছে? আমার কাছে এসএসআইএস-এ একটি ভেরিয়েবল আছে যা 'অর্ডারকাউন্ট' নামে থাকে যা সঞ্চিত প্রকল্প থেকে মান পেতে পারে।


1
আপনার প্রথম এক্সিকিউট এসকিউএল টাস্কে আপনাকে স্টোরড পদ্ধতিটির আউটপুটটি আবার নির্ধারণ করতে হবে@[User::orderCount]
মার্ক সিঙ্কিনসন

এটা কি উইন্ডো কোথাও যেতে হবে? (শেষ চিত্র আমি স্রেফ পোস্ট সম্পাদনা হিসাবে যুক্ত করেছি)
রবি

1
দুঃখিত, Result Setপৃষ্ঠায়। সরল-talk.com/sql/ssis/…
মার্ক সিংকিনসন

অনেক অনেক ধন্যবাদ, এটা এটা করেছে! এটি প্রথম কাজটি পাস করে দ্বিতীয় দিকে এগিয়ে যায়। আমি বলতে চাই যে "যে ভেরিয়েবলের মানটি যদি 5 এর চেয়ে কম হয় তবে পরবর্তী কাজটি করবেন না" বলার চেষ্টা করার সাথে আমি যে অভিব্যক্তিটি স্থির করেছিলাম তার কারণে এটি এগিয়ে না যায়।
রবি

দ্বিতীয় কাজটিতে জয়ওয়ন্ত, "অক্ষম" সম্পত্তিটির জন্য এমন কোনও মত প্রকাশের চেষ্টা করুন @[User::orderCount]<5?(dt_bool)1:(dt_bool)0। সফল হলে এই থ্রেডে ফলাফল পোস্ট করতে ভুলবেন না। জি এল!
পিটার ভ্যান্ডিভিয়ার

উত্তর:


10

এই কাজটি করার জন্য আপনার দুটি পছন্দ আছে। হয় আপনি একটি একক ফলাফল সেট ব্যবহার করতে পারেন বা আপনি OUTPUT প্যারামিটার ব্যবহার করতে পারেন। আপনি বর্তমানে সঠিকভাবে উভয়ই ব্যবহার করছেন।

আউটপুট প্যারামিটার

আপনার সঞ্চিত পদ্ধতিটি @OrderCountএকটি দিকের সাথে একটি প্যারামিটার থাকার হিসাবে সংজ্ঞায়িত করা হয়েছেOUTPUT

আপনি যদি কোনও সরঞ্জামের মধ্যে সঞ্চিত প্রক্রিয়াটি ব্যবহার করতে চান, এসএসএমএস,। নেট, যাই হোক না কেন, দেখতে এটির মতো লাগবে

DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;

OUTPUTউপরোক্তটি নির্দিষ্ট না করে চালানো বৈধ তবে @ordCount এর মান দেখুন। এটি 1435 থেকে 0 এ পরিবর্তিত হয়েছে।

আপনি যখন এসআইএসআইএসের মধ্যে এসকিউএল কার্য সম্পাদন করেন তখন একই জিনিসটি সত্য হয়। আপনাকে অবশ্যই উল্লেখ করতে হবে যে প্যারামিটারটি OUTPUT এ রয়েছে এবং এটি প্যারামিটার ম্যাপিংস ট্যাবেও নির্দিষ্ট করতে হবে।

OUTPUT ধারা এবং প্যারামিটার স্থানধারক নির্দিষ্ট করুন

এছাড়াও আপনি যে ভেরিয়েবলটি মানচিত্র করতে চান সেটি উল্লেখ করুন এবং সেখানে OUTPUT দিকটি ব্যবহার করুন। এখানে আমি ফলাফলটি ম্যাপ করেছি এসএসআইএস ভেরিয়েবলের ইনট 32 টাইপের টাইপটিতেorderCount

এখানে চিত্র বর্ণনা লিখুন

একক ফলাফল সেট

আপনার এই সঠিকটির প্রথম অংশ রয়েছে - আপনি নির্দিষ্ট করেছেন যে ফলাফল সেটটি একক সারি।

আপনি নোট করবেন যে আমি EXECUTE dbo.TestStoredProcSSVariable ?আপনাকে অবশ্যই একটি ইনপুট মান নির্দিষ্ট করতে হবে বা প্র্যাক কলটি বিরক্ত হবে (কমপক্ষে আপনি এটি সংজ্ঞায়িত করেছেন) হিসাবে ব্যবহার করছি। আপনি ?পছন্দ মতো এর পরিবর্তে হার্ড মান কোড করতে পারে0

এখানে চিত্র বর্ণনা লিখুন

তারপরে, ফলাফল সেট ট্যাবে, আমি এখানে প্রথম কলামটি (জিরোথ অর্ডিনাল) ভেরিয়েবলের সাথে ম্যাপ করছি orderCountb

এখানে চিত্র বর্ণনা লিখুন

আপনি সরবরাহিত সঞ্চিত প্রক্রিয়াটি চালনা করলে আপনি অর্ডারকাউন্টে কোনও মান পাবেন না। কেন? কারণ আপনি সঞ্চিত পদ্ধতি কল থেকে কোনও কিছুই ফিরিয়ে দিচ্ছেন না। এর সঞ্চিত পদ্ধতির ভিতরে আমি একটি চূড়ান্ত বিবৃতি যুক্ত করেছি

SELECT @OrderCount AS OrderCount;

নিজে করো

আপনি নিম্নলিখিত বিমল ব্যবহার করে উভয় পদ্ধতির অন্বেষণ করতে পারেন। বিমল কী? বিজনেস ইন্টেলিজেন্স মার্কআপ ল্যাঙ্গুয়েজ বিআইয়ের অপারেটিং সিস্টেম। আপনি কেন এটি সম্পর্কে যত্নশীল তা হ'ল এটি আপনাকে কিছু এক্সএমএলকে একটি এসএসআইএস প্যাকেজে রূপান্তর করতে দেয়। আপনাকে যা করতে হবে তা হ'ল ফ্রি অ্যাডন বিআইডিএস হেল্পার ডাউনলোড এবং ইনস্টল করা

বিআইডিএস হেল্পার ইনস্টল করার পরে,

  1. প্রকল্পে ডান ক্লিক করুন এবং নতুন বিমল ফাইল যুক্ত করুন নির্বাচন করুন
  2. নিম্নলিখিত এক্সএমএল দিয়ে ফাইলের বিষয়বস্তু প্রতিস্থাপন করুন
  3. লাইনে 5 মানগুলি ঠিক করুন Data Sourcea সত্যিকারের সার্ভারে আপডেট করুন এবং Providerআপনার এসএসআইএস সংস্করণটির সাথে সারিবদ্ধ করুন। আপনার স্ক্রিনশটটি দেখে, এটি সম্ভবত এসকিউএলএনসিএলআই 10.1 হবে
  4. বিমলস্ক্রিপ্ট.বিমলে রাইট ক্লিক করুন এবং এসএসআইএস প্যাকেজগুলি জেনারেট করুন চয়ন করুন

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>

নিম্নলিখিত এসএসআইএস প্যাকেজটি উপভোগ করুন

এখানে চিত্র বর্ণনা লিখুন


এটি অবিশ্বাস্যভাবে সহায়ক এবং তথ্যবহুল ছিল, আপনাকে অনেক ধন্যবাদ, বিলিংক! অত্যন্ত সহায়ক পোস্ট! অনেক ধন্যবাদ!
রবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.