8

SSIS 2008。非常に単純なタスク。システム変数を取得し、SQL INSERT で使用したいと考えています。System:MachineNameの値を取得して、insert ステートメントで使用したいと考えています。

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

ステートメントを使用するSELECT @System::MachineNameSELECT @@[System::MachineName] 、エラーを与える'Error Incorrect systax near '::'

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

4

4 に答える 4

16

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

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

テーブル構造

  • SSIS パッケージを作成します。
  • SSIS でSQLServer、SQL Server データベースなどのデータベースに接続するための名前の OLE DB 接続マネージャーを追加します。
  • [制御フロー] タブで、Execute SQL Task
  • SQL 実行タスクをダブルクリックして、SQL 実行タスク エディターを表示します。
  • エディターのGeneralタブで、Connectionプロパティを SQLServer という名前の接続マネージャーに設定します。
  • プロパティSQLStatementに、insert ステートメントを入力します。INSERT INTO dbo.PackageData (PackageName) VALUES (?)

一般タブ

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

パラメータマッピングタブ

  • パッケージを実行します。
  • テーブルに新しいレコードが挿入されていることがわかります。パッケージ名は Package のままにしました。だからテーブルは

パッケージデータ

それが役立つことを願っています。

于 2012-04-18T21:56:37.060 に答える
1

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

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

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

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

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

于 2015-07-27T00:49:26.183 に答える
0

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

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

于 2012-04-18T20:13:33.377 に答える