web-dev-qa-db-ja.com

SQL実行タスクでシステム変数値をSQLステートメントに渡すにはどうすればよいですか?

SSIS2008。非常に簡単なタスク。システム変数を取得してSQLINSERTで使用したいと思います。 _System:MachineName_の値を取得して、挿入ステートメントで使用したいと思います。

ステートメントINSERT INTO MYLOG (COL1) SELECT @[System::MachineName]を使用すると、エラーが発生します_Error: ..failed to parse. Must declare the scalar variable "@"_

ステートメント_SELECT @System::MachineName_または_SELECT @@[System::MachineName]_を使用すると、エラーが発生します_'Error Incorrect systax near '::'_

クエリにパラメータを渡そうとはしていません。私はすでに1日を検索しましたが、この1つの簡単なことを行う方法を見つけることができませんでした!

8
mroselius

これを行う1つの方法があります。次のサンプルパッケージは、_SSIS 2008 R2_を使用して作成され、SQL Server 2008R2をバックエンドとして使用しています。

  • SQLServerデータベースに_dbo.PackageData_という名前のサンプルテーブルを作成します

Table structure

  • SSISパッケージを作成します。
  • SSISで、SQLServerという名前のOLE DB接続マネージャーを追加して、データベース、たとえばSQLServerデータベースに接続します。
  • [制御フロー]タブで、_Execute SQL Task_をドラッグアンドドロップします
  • 「SQLの実行」タスクをダブルクリックして、「SQLの実行」タスク・エディターを表示します。
  • エディターのGeneralタブで、ConnectionプロパティをSQLServerという名前の接続マネージャーに設定します。
  • プロパティSQLStatementに、挿入ステートメントを入力しますINSERT INTO dbo.PackageData (PackageName) VALUES (?)

General tab

  • [パラメータマッピング]タブで、[追加]ボタンをクリックし、使用するパッケージ変数を選択します。それに応じてデータ型を変更します。この例では、PackageNameをテーブルに挿入するため、_Data Type_はVARCHARになります。 Parameter Nameを_0_に設定します。これは、パラメーターのインデックス値を示します。 [OK]ボタンをクリックします。

Parameter Mapping tab

  • パッケージを実行します。
  • テーブルに新しいレコードが挿入されていることに気付くでしょう。パッケージ名をPackageとして保持しました。だからテーブル

Package data

お役に立てば幸いです。

16
user756519

@ZEROの回答に対する私のコメントによると(SSISの新規参入者が見落とさないように、回答としてここで繰り返します)。

OPの質問は、ほとんどSSISプロパティ式のユースケースです。

SSIS変数をクエリ文字列に渡すには、SSIS変数をSqlStatementSourceプロパティの式セットに連結します。

"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]

これは、受け入れられた回答が適切なパターンではないことを示唆するものではありません。一般に、パラメーター化されたアプローチは、直接のクエリ文字列操作よりも安全で(SQLインジェクションに対して)高速です(再利用時)。ただし、(ユーザーが入力した文字列ではなく)システム変数の場合、このソリューションはSQLインジェクションから安全である必要があり、再利用した場合(マシン名は変更されないため)、パラメーター化されたクエリとほぼ同じか高速になります。 )。

1
Sepster

これまで使用したことはありませんが、SQLの実行タスクで式の使用を確認できるかもしれません。

または、evaluateAsExpressionをtrueに設定して、クエリ全体を変数の式に入れます。次に、OLE DBを使用して挿入しますか

0
ZERO

@ user756519の回答に加えて、接続文字列、変数名、およびSQLStatementSourceの変更に応じて

https://docs.Microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task

0
Sam