• 締切済み

SSIS 変数の値をSQL実行タスクで使用する方法

みなさま初めまして。 SSISの変数利用について教えて頂きたく、何卒宜しく願いいたします。 現在、SSISの変数に入った値をSQL実行タスクで実行(正確には、変数の値を含むレコードを削除)したく、他スレッドを参考にし、下記設定を行おうとしたのですが、エラーが出力され登録が出来ません。。 SQL実行タスク ->左メニューより、「式」を選択 ->Expressionsにて、SqlStatementSourceを選択 ->下記式を記述 ----------------------------- DELETE FROM [tblTesttable] WHERE TIMEID = @[User::valtime] ----------------------------- 行いたいことは、テーブル(tblTesttable)から、項目TIMEIDの値がユーザ変数(valtime)と同じレコードを削除するという内容です。 上記式を記述し、「式の評価」を行うと、下記エラーが出力されてしまいます。。。 ------------------------------------------------------ 式"DELETE FROM [tblTesttable] WHERE TIMEID = @[User::valtime]"を解析できませんでした。この式には無効なトークン、不完全なトークン、または無効な要素が含まれている可能性があります。また適切な形式でないか、かっこなどの必要な要素の一部が不足している可能性があります。 ------------------------------------------------------- SSISについて初心者であり、ネットや本でいろいろ探しているのですがなかなかうまくいかず。。。 大変お手数ですが、どなたか教えて頂けますと大変に助かります。 どうか宜しくお願い致します。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQL実行タスクに変数を割り当てる場合は、 ・Statementには 「DELETE FROM [tblTesttable] WHERE TIMEID=?」と指定します。 ・パラメータマッピングを指定します 変数名:User::valtimeを選択 方向:Input データ型:DATE パラメータ名:0 (たぶん、ここがミソ) パラメータサイズ:-1 (デフォルトのまま。SP2が当たってないとないかも) パラメータが複数ある場合は、パラメータ名を0,1,2..という風に増やします。 そうすると、パラメータが「?」に順番に割り当てられていきます。

blissmc78
質問者

お礼

jamshid6様 大変にお忙しい中、早速の回答頂き大変感謝致します!!!!! アドバイス頂いた内容に従って設定したところ、うまく実行されました。 おっしゃるとおりパラメータマッピングの箇所がポイントでした。 本当にありがとうございました!

関連するQ&A

  • SSIS 変数の値をSQL実行タスクSQLStatementで利用する方法

    初めまして! SSISの変数利用について 教えて頂きたいので よろしくお願いいたします。 SSISの変数に入った値をSQL実行タスクの SQLStatementで利用することは できませんでしょうか? 具体的に何をやりたいかと言いますと データを取り込む為に一時テーブルを使います。 SQL実行タスクで一時テーブルを作成して、 データを取り込み、処理後に一時テーブルを削除します。 素人考えで、もしほぼ同時にパッケージが実行された場合に 一時テーブルの名前がカブっていると不具合の元にならないかと思いました。 そこで、変数の値でテーブル名を動的につけられればと思ったのですが、 変数に入れた値を、 色々調べてみたのですが SQL実行タスクエディタのSQLStatementでどう呼び出せばよいのか分かりません。 例えば、以下のような文で##test_table の部分を変数で指定することはできないのでしょうか? CREATE TABLE ##test_table( [CD] VARCHAR(10), [NAME] VARCHAR(20) ) GO お手数ですが、ぜひ教えてください。 SSISを始めたばかりで 考え方自体がおかしいのかも知れません・・・。 その場合は本当に申し訳ありません どうぞよろしくお願いいたします!

  • SSISにて変数を使用したSQL実行タスクの更新結果について

    はじめまして。 現在、SSISを使用して開発を行っています。 そこで、変数を使用したSQL実行タスクを構築したのですが、 ご存知の方はご回答願います。 処理内容としては、batプログラムにてdtexecでvalueというパラメータに0.7と渡します。 その後、SQL実行タスクのSQLstatementにて「UPDATE sample SET flag = '1' WHERE a <= ?」というように、 aの値がvalue以下だったら、フラグを更新するようなSQLをくみました。 実行し、確認をしたのですが、SSISを構築した端末で処理を行うと正しく更新されるのですが、 ビルドしたdtsxをサーバー上等、他の端末で実行すると、a=0.7のデータに対してフラグが更新されません。 ProtectionLevel値には、DontSaveSensitiveをセットしてあります。 何かご存知の方は、ご教示願います。

  • SSISのデータフロー内のSQLコマンドテキストで外部のパラメータを使う方法が分かりません

    以下のようにDTExecを使って、 パラメータをSSISパッケージに引渡しをしています。 DTExec.exe /f D:\SSIS\test.dtsx /Set "\Package.Variables[User::Date].Properties[Value]";"20090101" 制御フローのSQL実行タスクではExpressionsを使い、 以下のように記述すれば良いのですが、 " SELECT   Clm1, Clm2 FROM   T_Data WHERE   Date = '" + @[User::Date] + "'" データフロー内のSQLコマンドテキストでは この表記が出来ないため、どのように記述すれば良いのか分からず 困っております、、 (それとも、そもそも出来ないのでしょうか??) どなたかご教授願えないでしょうか? 以上、よろしくお願い致します。

  • 変数に入った値を変数として扱うことはできますか?

    VBスクリプトで自動で作成した値を変数に変化したいのですが、可能なのでしょうか? 例えば hensu = "5" ~DBのテーブルからフィールド名"hensu"を抜き出し、変数"field_set"に入れる。~ OpenField = OpenField & field_set& "=""&"& field_set&"&""" sql = "update test_table set" sql = sql &" "& OpenField sql = sql & "where scode = '" & scode & "'" という感じにしたいのですが、当然"field_set"には"5"ではなく"hensu"というフィールド名の文字列が入ります そもそも変数に入れた値を変数に変換する事って可能なのでしょうか? 宜しくお願い致します。

  • VBA ACCESS SQL WHERE句の数値型の変数の記述の仕方

    いつもお世話になっております。 i = Me!ID ’数値型です sql = "DELETE FROM T_DELETE_ID WHERE DELETE_ID = ""i"";" CurrentDb.Execute (sql) としたところ、SQLのWHERE句の条件の指定の仕方が どうもうまくいきません。 sql = "DELETE FROM T_DELETE_ID WHERE DELETE_ID = 101;" CurrentDb.Execute (sql) のようにWHERE句の値を数字にしたら実行できます。 この場合はどのようにしたらよろしいでしょうか わかる方いらっしゃいましたら、。ご教示の程よろしくお願いいたします。

  • SQL Developerでクエリ実行

    select * from テーブルA where カラムA2 = :バインド変数 select * from テーブルB where カラムB2 = :バインド変数 SQL Developerでエディタに記述した複数のSQLを一度に実行する際に ①同じ名前のバインド変数であっても何度も値を聞いてくるのを1回で済ませたい ②SQLごとにひらく問い合せ結果について名前が問い合せ結果1、問い合せ結果2だとわかりづらいので、固有の名前をクエリ実行時に自動でつけるようにしたい よろしくお願いします。

  • mysqlで変数を使う方法

    SQL文にPHPの変数のように変動する値を指定することはできますでしょうか。 データベースから特定のレコードを拾ってきて PHPのPOSTメソッドでその値を送信するシステムを作ろうとしています。 具体的には、データベースに名簿(IDと名前だけの簡単なものです)を 予め作っておき、送信ボタンをクリックしたユーザーのIDと紐付いている 名前を送信したいと考えています。 [MySQL] table:meibo id | name ------------ 1 | itou 2 | yamada 3 | suzuki [PHPソース](一部抜粋) ------------ $sql = mysql_query('SELECT * FROM meibo where id=【ここを変動させたい】', $connect); $sql = mysql_fetch_array($sql); $req->addPostData("user_name", $sql['name']); ------------ $idに操作しているユーザーのIDが代入されているとして 以下のようにmysql_queryの中で実行しているSELECT文に$idを利用することは可能でしょうか。 SELECT * FROM meibo where id=$id もし上記のような方法が無理な場合、 代替案をご提案いただけると非常に助かります。 読みにくい文章で恐縮ですが、 どうかお助けください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MS-DOSでのSQL実行について

    MS-DOSでSQLPlusを使い、select文などを実行しようと思うのですがソースコードの書き方がいまいち分かりません。 sqlplus ユーザ名/パスワード@データベース名 @実行したいSQLファイル1 if "%a%"==1( @実行したいSQLファイル2 ) else ( @実行したいSQLファイル3 exit というような形でソースを書いたのですがSQLのファイルが開かなかったりでうまく動きません。 SQLファイルの中身はselect文などで、 変数aはSQLの中でsetされる変数です。 どのように書けばうまく実行できるのでしょうか? また、参考になるサイトなどありましたら教えて頂けると助かります。 よろしくお願いします。

  • PL/SQLで…SQLの実行結果を変数を格納する方法

    毎度お世話になります。 SQL文の実行結果を変数に格納する方法がわからず困っております。 ご存知の方が居られましたらご教示いただきたい所存です。 常に1つの値しか返さないようなSQL文なので 変数V number := 'select count(B列) from B表'; みたいな書き方はで 入るか見てみようと思ったのですが コンパイルはできるものの、 実行すると「文字から数値への変換エラー。が発生しました」と なって上手くいきませんでした。 'select count(B列) from B表'が単なる文字列として解釈されて エラーになっているのだとは思うものの 正しい書き方がわからないのでよろしくお願いいたします。

  • 2回実行のSQL文を1回にしたい

    テーブルXXXがありますその中の各フィールドは以下の通りです。 フィールド A フィールド B フィールド C まずA=0の検索をしてBの値を取り出し、新たにB=取り出した値で 検索をしたいのですがSQL文が1つにできないでしょうか? 今現在、 SELECT * FROM XXX WHERE A=0 を実行してBの値を変数Dに入れ SELECT * FROM XXX WHERE B=D と実行して全てのCの値を取り出しています よろしくお願いします。