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つの簡単なことを行う方法を見つけることができませんでした!
これを行う1つの方法があります。次のサンプルパッケージは、_SSIS 2008 R2
_を使用して作成され、SQL Server 2008R2をバックエンドとして使用しています。
dbo.PackageData
_という名前のサンプルテーブルを作成しますSQLServer
という名前のOLE DB接続マネージャーを追加して、データベース、たとえばSQLServerデータベースに接続します。Execute SQL Task
_をドラッグアンドドロップしますGeneral
タブで、Connection
プロパティをSQLServerという名前の接続マネージャーに設定します。SQLStatement
に、挿入ステートメントを入力しますINSERT INTO dbo.PackageData (PackageName) VALUES (?)
Data Type
_はVARCHAR
になります。 Parameter
Nameを_0
_に設定します。これは、パラメーターのインデックス値を示します。 [OK]ボタンをクリックします。お役に立てば幸いです。
@ZEROの回答に対する私のコメントによると(SSISの新規参入者が見落とさないように、回答としてここで繰り返します)。
OPの質問は、ほとんどSSISプロパティ式のユースケースです。
SSIS変数をクエリ文字列に渡すには、SSIS変数をSqlStatementSourceプロパティの式セットに連結します。
"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]
これは、受け入れられた回答が適切なパターンではないことを示唆するものではありません。一般に、パラメーター化されたアプローチは、直接のクエリ文字列操作よりも安全で(SQLインジェクションに対して)高速です(再利用時)。ただし、(ユーザーが入力した文字列ではなく)システム変数の場合、このソリューションはSQLインジェクションから安全である必要があり、再利用した場合(マシン名は変更されないため)、パラメーター化されたクエリとほぼ同じか高速になります。 )。
これまで使用したことはありませんが、SQLの実行タスクで式の使用を確認できるかもしれません。
または、evaluateAsExpressionをtrueに設定して、クエリ全体を変数の式に入れます。次に、OLE DBを使用して挿入しますか