SSISの優先順位制約の設定がうまくいかない

このQ&Aのポイント
  • SSISの優先順位制約の設定がうまくいかず、エラーメッセージが表示されます。
  • 原因はSQL実行タスクコンテナの設定や優先順位制約エディタの設定に問題がある可能性があります。
  • 優先順位制約についての文献は少ないため、詳しい情報が不足しています。
回答を見る
  • ベストアンサー

SSISの優先順位制約の設定がうまくいかない

SSISの優先順位制約について、 http://msdn.microsoft.com/ja-jp/library/ms140153.aspx を参照しながら設定してみたのですが、どうもうまく出来ません。。 やりたい事としては、 select count(*) as cnt from TABLE 上記クエリにてテーブルデータ件数を取得し、 0件でなければ次のコンテナの処理に移す、といったものです。 手順としては、以下を試しました。 ------------------------------------- ≪SQL実行タスク コンテナの設定≫ ▼全般タブ  ▽SQLステートメント   ・SQLSourceType:直接入力   ・SQLStateMent:select count(*) as cnt from TABLE  ▽結果セット   ・ResultSet:単一行 ▼結果セットタブ  ・結果名:@cnt  ・変数名:新しい変数にて、以下の設定を実施   ・コンテナ:パッケージ全体を選択   ・名前:変数   ・名前空間:User   ・値の型:Int32 や String で実施   ・値:0(Int32の場合) や cnt(Stringの場合) ≪優先順位制約エディタの設定≫ ▼制約オプション  ・評価操作:式と制約  ・値:成功  ・式:@cnt > 0 ------------------------------------- 全く検討違いな設定をしているとは思うのですが、 設定自体は可能で、いざ実行させると以下のエラーが表示されます。 「@cnt > 0 は True または False に評価される必要があります」 優先順位制約について、文献がほとんど見つけられなかったため、 この件についてご存知の方がいらっしゃいましたら、 何卒、ご教授のほどよろしくお願い申し上げます。

質問者が選んだベストアンサー

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

SQL 実行タスクの「パラメータマッピング」にも何か入れちゃっていませんか?いろいろ試したけど、そのメッセージが出るのは、パラメータマッピングが正しくなかったときだけです。 今回のは「パラメータマッピング」はいらないですよね。 なお、変数の削除は、さっきも書いた「SSISメニュー→変数」からできますよ。

chic_punk
質問者

お礼

恥ずかしながら、おっしゃるとおり、 「パラメータマッピング」に入れてしまっておりました。。 削除すると、無事動作しました! >なお、変数の削除は、さっきも書いた「SSISメニュー→変数」からできますよ。 また、こちらもありがとうございます!!とても助かります。

chic_punk
質問者

補足

jamshid6さま 恐れ入ります、もう1点だけ質問させてください。 ファイルの存在有無では、優先順位制約の設定は出来ないのでしょうか? 例えば、ファイルが存在しなければ処理を実施しない等。。 (やはり、スクリプト タスク でないと出来ないでしょうか?) 状況により、また別スレを立てさせていただきます。

その他の回答 (1)

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

・結果セットの結果名は@cnt=>cntとしてください。  (この結果名は返されるクエリのフィールド名と思ってください) ・「SSIS」メニュー→変数を選択し、変数の名前が「変数」になっているのをcntに変更してください。それを結果セットの変数に割り当て直してください。 ・結果セットの型はInt32で構いません。 式は大文字小文字も正確に。ちなみにイコールのときは「@cnt==0」となります(中身はJScriptなんですかね)

chic_punk
質問者

補足

jamshid6様 早速のご回答ありがとうございます。 ありがとうございます! パッケージ自体は動作するようになりました!が、 今度は以下のエラーが、、 ---------------------------- [SQL 実行タスク] エラー : クエリ "select count(*) as cnt from TABLE where aaa = '0' " の実行が次のエラーで失敗しました: "パラメータ名は認識されていません。"。 考えられるエラーの理由: クエリに問題がある、"ResultSet" プロパティが正しく設定されていない、パラメータが正しく設定されていない、または接続が正しく確立されていない。 ---------------------------- ちなみに、変数の設定は以下のとおりです。 ▼結果セットタブ ・結果名:cnt ・変数名:  ・コンテナ:パッケージ全体を選択  ・名前:cnt  ・名前空間:User  ・値の型:Int32  ・値:0 値の設定がマズイのでしょうか・・? あと、自分で作成した変数の編集や削除というのは出来ないのでしょうか・・・? (この問題と直接関係の無い質問でスミマセン)

関連するQ&A

  • SSISの優先順位制約の設定について(ファイル存在有無確認について)

    http://okwave.jp/qa4270309.html の続きです。 SSISにて、ファイルの存在有無では、 優先順位制約の設定は出来ないのでしょうか? 例えば、ファイルが存在しなければ処理を実施しない等。。 (やはり、スクリプト タスク でないと出来ないものでしょうか?) どなたかご存知の方がいらっしゃいましたら ご教授頂きたく思います。

  • SQLで優先順位が高いレコードを抽出する方法

    こんにちは。 あるテーブル"T_A"が有り、 そのテーブルにカラム"C1"、"C2"が有ります。 テーブル"T_A"にレコードが以下の用に登録されていると仮定します。 C1|C2 ----- AA|S AA|P BB|R BB|S CC|S ※C2に登録されている値は抽出する優先順位が有り、 R:1 P:2 S:3 Rが一番優先順位が高く、Sが優先順位が最も低いです。 この条件から、C1の値が同じレコードに対して、C2の優先順位が 最も高いレコードを抽出したいです。 欲しい結果↓ C1|C2 ----- AA|P BB|R CC|S

  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • 動的SQLのCOUNTのとり方

    動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • SELECT文で片方のテーブルを優先したい

    以下の3つのテーブルから、下記のような結果を得たいです。 table1:PK=id id(int), count(int) ------------------- 1, 11 2, 12 3, 13 5, 15 table2:PK=id ------------------- id(int), count(int) 1, 21 2, 22 4, 24 tableID:PK=id id(int) ------------------- 1 2 3 4 5 6 得たい結果 tableIDのすべてのIDに対して、 table2に見つかればtable2のID、 table2に見つからずtable1に見つかればtable1のID、 両方になければnull id, count ---------- 1, 21 2, 22 3, 13 4, 24 5, 15 6, null よろしくお願いいたします。

  • 優先順位を決定するアルゴリズム

    優先順位を決定するアルゴリズムがありましたら ご教授下さい. やりたい事は,以下の通りです. ・A,Bの二人がいる. ・二人はそれぞれというパラメータを持つ. ・各自パラメータに優先順位をつけている. ・二人にとってのパラメータの優先順位を決定する 例)A,Bがそれぞれ,a,b,cというパラメータを持つ. 各自パラメータに優先順位をつけている. A a:1 b:2 c:3 B a:2 b:2 c:1 この時,二人にとってのパラメータの優先順位を決定する.私は,以下の方法を考えました. 1.二人のパラメータの優先順位を足して 合計値を計算する. 2.値が同じ場合は,値の分散値が低い方が,優先順位が低いとする a:1+2 = 3 b:2+2 = 4 c :3+1 = 4 bの分散値の二乗:(2-2)の二乗 + (2-2)の二乗 cの分散値の二乗:(3-1)の二乗 + (2-1)の二乗 よって,bとcでは,bの方が優先順位が低いとする この他にも,優先順位を決定するアルゴリズムに関して,他の方法や,既存研究等がありましたらご教授下さい.

  • 複数のカラムを対象にしたプライマリキー制約の設定

    テーブル作成後に複数のカラムを対象にしたプライマリーキー制約を設定することはできるのでしょうか。 テーブル作成時であれば、次の方法により設定することができます。 ※col_name1及びcol_name2に設定したい場合 CREATE TABLE tbl_name (col_name1 int NOT NULL, col_name2 int, col_name3 varchar(255), PRIMARY KEY(col_name1, col_name2)); しかし、一旦テーブルを作成した後に、プライマリーキー制約を設定し忘れたことに気が付き、設定したい場合は、いかなる方法によりできるのでしょうか。 次の方法にて試みたものの、エラーが生じました。 【SQL文】 ALTER TABLE tbl_name MODIFY col_name1 int, col_name2 int, PRIMARY KEY(col_name1, col_name2); 【エラー内容】 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'col_name2 int, PRIMARY KEY(col_name1, col_name2)' at line 1 テーブルを削除し、再作成時にプライマリーキー制約を設定する方法によっても対応できますが、削除しなくてもこれを行える方法があるのか否かを知りたく、質問させていただきました。

    • ベストアンサー
    • MySQL
  • スレッドのスケジューリングポリシーと優先順位の設定(pthread)

    こんにちは。今、マルチスレッドのプログラミングをする上で困っていることがあります。 pthread(スレッド)の優先順位をどのように変更するのかがわかりません。 また、メインの優先順位も変更したいのですがよくわかりません。 現在、↓のようにやっていますが、変更されていないような気がします。 間違っているようであればご指摘やアドバイスをいただけるとうれしいです。 宜しくお願いします。 ------------------------- int main(){ int policy; pthread_t th; pthread_attr_t th_att; struct sched_param scp; /* pthread の優先順位の変更 */ scp.sched_priority = 50; /* この値は適当です…*/ policy = SCHED_FIFO; pthread_attr_init(&th_att); pthread_attr_setschedpolicy(&th_att,policy,&scp) /* mainの優先順位の変更*/ scp.sched_priority = 30; /* この値は適当です…*/ pthread_setschedparam(pthread_self(),policy,&scp) pthread_create(&th,&th_att,(void*)func,NULL); . . .

  • スレッドの優先順位に関して

    ただ今、黒本(徹底攻略 Java2 プログラマ問題集 Platform5.0 対応) を使用しSJC-Pの勉強をしているんですが、スレッドの20番目の問題が どうしてもわからないので質問させて下さい。 下記の問題なんですが コンパイルし実行した結果として正しい物を選ぶという 問題で、答えは「 B A B A B A と表示される」になります。 class MyThread extends Thread{ MyThread(String name){ super(name); } public void run(){ System.out.println(getName()); for(int i=0;i<2;i++){ try{ sleep(1000); }catch(Exception e){} yield(); System.out.println(getName()); }}} class T20{ public static void main(String[] args){ Thread t1 = new MyThread("A"); t1.setPriority(1); t1.start(); Thread t2 = new MyThread("B"); t2.setPriority(10); t2.start(); } } この問題の答えの解説で 優先順位を指定すると必ず高い優先順位のスレッドから 実行が開始するみたいな事が書かれてて、おかしいと思い、 検証してみたところ、私の環境では、結果が何通りも表示されました。 yield()についても私の持っている別の参考書には 「現在実行中のスレッドオブジェクトを実行可能状態に戻し、 他のスレッドに実行できるようにする。ただし優先順位の関係で実行中だったスレッドが再度実行される可能性もある。」 と書かれていて上記の答えに納得が出来ていません。 スレッドの優先順位とyieldに関して お手数ですが、アドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • スタイルシートの優先順位について

    以下のスタイルシートですが(1)の方が優先順位は高いと思いますが、 正確な獲得ポイントがわかりません。 (2)は 11ポイントと思いますが(1)は何獲得ポイントでしょうか? table.test td { /* (1) */ color: red; } .test td { /* (2) */ color: blue; } CSSの優先順位や獲得ポイントについての本家のサイトはあるのでしょうか?