ストアドプロシージャの結果をSSIS変数に割り当てる


9

ストアドプロシージャからSSIS変数に値を取得し、式を追加した場合に2つのSSISタスクが機能するかどうかをテストしています。したがって、例として、このストアドプロシージャを使用しようとしています。

ここに画像の説明を入力してください

おそらく、SSIS変数のプロパティを完全に間違って設定しているのかもしれません。これは、ストアドプロシージャの値をSSIS変数にインポートするための正しい方法でこれを行っているかどうかもわからないためです。他に何かスクリーンキャプチャが必要かどうか教えてください。

これがタスクの例です:

ここに画像の説明を入力してください

そしてここに優先順位制約エディタのスクリーンキャプチャがあります:

ここに画像の説明を入力してください

そして、これが最初のタスクのプロパティです:

ここに画像の説明を入力してください

その条件に基づいて前進(または失敗)させたい。しかし、テストすると、プロセスは最初のタスクから2番目のタスクに関係なく流れ、最初のタスクの「100%完了」のみを示し、この式が真かどうかをチェックしたかどうかについては何も表示しません。どうすればこのようなことができますか?ストアドプロシージャから値を取得するために、SSISに 'orderCount'という変数があります。


1
最初のSQL実行タスクでは、ストアドプロシージャの出力を@[User::orderCount]
Mark Sinkinson

それはそのウィンドウのどこかに行きますか?(私が投稿編集として追加した最後の画像)
Ravi

1
Result Setページで申し訳ありません。simple-talk.com/sql/ssis/...
マーク・Sinkinson

どうもありがとうございました。最初のタスクをパスし、2番目に進みます。「その変数に渡された値が5未満の場合は、次のタスクを実行しないでください」と言うように設定した式のために、先に進まないようにしたいと思います。
Ravi

@Jaywantの2番目のタスクでは、「Disable」プロパティの式をのように設定してみてください@[User::orderCount]<5?(dt_bool)1:(dt_bool)0。成功した場合は、結果をこのスレッドに投稿することを忘れないでください。GL!
Peter Vandivier、2015

回答:


10

これを機能させるには、2つの選択肢があります。あなたは、単一の結果セットを使用するか、またはあなたは、OUTPUTパラメータを使用することができます。現在、どちらも正しく使用していません。

OUTPUTパラメーター

あなたのストアドプロシージャは@OrderCount、方向のパラメータを持つとして定義されていますOUTPUT

ツール、SSMS、.NETなどでストアドプロシージャを使用する場合は、次のようになります。

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

指定せずに上記を実行することは有効ですがOUTPUT、@ orderCountの値を確認します。1435から0に変わります。

SSIS内でSQL実行タスクを使用している場合も同様です。パラメータがOUTPUTにあることを指定し、[パラメータマッピング]タブでも指定する必要があります。

OUTPUT句とパラメータープレースホルダーを指定する

また、マップする変数を指定し、そこでOUTPUT方向を使用します。ここで、結果をInt32型のSSIS変数にマッピングしました。orderCount

ここに画像の説明を入力してください

単一の結果セット

あなたはこれの最初の部分を正しく持っています-結果セットが単一行であることを指定しました。

EXECUTE dbo.TestStoredProcSSVariable ?入力値を指定する必要があるので、使用していることに注意してください。そうしないと、(少なくとも定義したとおりに)proc呼び出しが中断します。?同様の値の代わりに値をハードコーディングすることもできます0

ここに画像の説明を入力してください

次に、[結果セット]タブで、最初の列(0番目の序数)をという変数にマッピングします。 orderCountb

ここに画像の説明を入力してください

提供されているストアドプロシージャを実行した場合、orderCountbの値は取得されません。どうして?ストアドプロシージャコールから何も返さないからです。のストアドプロシージャ内に最後のステートメントを追加しました

SELECT @OrderCount AS OrderCount;

自分でやれ

次のbimlを使用して、どちらのアプローチも探索できます。bimlとは何ですか?ビジネスインテリジェンスマークアップ言語は、BIのオペレーティングシステムです。気にする理由は、XMLをSSISパッケージに変換できることです。無料のアドオンBIDSヘルパーをダウンロードしてインストールするだけです。

BIDS Helperをインストールした後、

  1. プロジェクトを右クリックして、[新しい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パッケージをお楽しみください

ここに画像の説明を入力してください


それは信じられないほど有用で有益でした、billinkc、ありがとうございました!非常に役立つ投稿!どうもありがとう!
Ravi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.