• 締切済み

【SQLServer】何も処理しない場合の記述について

【SQLServer】何も処理しない場合の記述について お世話になってます。 ご存知の方いらっしゃいましたら教えてください。 Oracleでは、IF文の中で何も処理したくない場合、明示的にNULLと書けば、コンパイルできます。 IF XXXXX THEN A = 100 ELSE -- 何もしない NULL END たとえ何も処理しない場合でも、明示的にELSE句を 書きたい場合は、 SQLServerの場合、何をかけばよいのでしょうか? 今のところ下記のように、ELSEの場合は意味の無い処理を記述しています。 IF XXX BEGIN A=100 END ELSE IF BEGIN -- 何も処理しない A = A END A=Aは意味の無い処理なのですが、削除するとコンパイルが通らなくなってしまうのでやむなく記述してます。 どなたかいいアイデアありましたらご教授くださいませ。 よろしくおねがいします。

みんなの回答

  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.2

#1です 失礼しました。"明示的にELSE句を"の部分を読んでいませんでした IF XXX BEGIN A=100 END ELSE BEGIN   return END これでいいと思います。

mamiyak
質問者

お礼

なるほど。 以降の処理が何もない場合はそれでよいかもしれません。 ありがとうございました!

  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.1

そもそもELSE IFが要らないと思いますよ IF XXX BEGIN SET A=100 END これだけでいいと思いますが

関連するQ&A

  • MYSQL ストアドプロシージャの記述方法

    MYSQLのストアドプロシージャについて分からないことがあり質問させて頂きます。 SQLのwhere句の部分を引数によって条件分で変更させたいと考えています。そこでORACLEの場合は変数にいれて最後に明示的にSQLを発行して いたので可能だったのですが、MYSQLの場合はどういった記述になる のかわかりません。やりたいことは下記のような感じです。 ORACLEの場合は procedure prctest(pc out refcur,a in varchar2,b in varchar2) is sqldata varchar2(1000); whereinfo varchar2(1000); begin sqldata := 'select ID , NAME from testTbl '; if (a IS NOT NULL) then   whereinfo := whereinfo || ' acol = a ' ; end if; if (b IS NOT NULL) then   if (whereinfo IS NOT NULL) then  whereinfo := whereinfo || ' and ';   end if;   whereinfo := whereinfo || ' acol = b ' ; end if; if (whereinfo IS NOT NULL) then  sqldata := sqldata || ' where ' || whereinfo ; end if; open pc for sqldata; (ここでSQLが入ったSQLを発行) end prctest; (抜粋) ストアドをあまり使用したことがなく良い説明ではないかも しれませんが、アドバイスの方頂けたらと思います。 よろしくお願いします。

  • シェルからsqlplusたたいて、ストアド呼び出し後の処理について。

    質問です。 shellからSqlplus→ストアド呼び出しを行います。 まず、ソースをご覧下さい。 VARIABLE ret NUMBER; DECLARE cnvtStat NUMBER; BEGIN cnvtStat := 0; cnvtStat := PK_TEST.TEST(A); IF ( cnvtStat >= 0 ) THEN :ret := 0; ELSE :ret := 9; END IF; EXCEPTION WHEN OTHERS THEN :ret := 9; END; となっています。 困っていることは ストアドのヘッダ部がコンパイルエラーの場合、 EXCEPTIONに引っかかってくれないのです。 本体のコンパイルエラーはEXCEPTIONに引っかかります。 このままでは、ヘッダがコンパイルエラーで ストアド処理が行われないのに、 呼び出し側では気づかず処理を続行してしまいます。 どのようにエラーハンドリングすればよいのか 皆さんお手数かけますが、アドバイスよろしくお願いします。

  • Verilog-HDLのFF記述について

    先程アップしたのは、図が変になってしまいました。 改めて質問します。 1つのFF(非同期リセット)をVerilog-HDLで記述すると、以下のように記述出来ますよね? always @ ( posedge CLK or negedge RESET ) begin if ( !RESET ) begin Q <= 1'b0 ; xQ <= 1'b1 ; end else begin Q <= D ; xQ <= ~D ; end end この1つのFFをalways文を2つ使って記述出来るんですか? ご回答宜しくお願いします。

  • SQLServer2000で。

    こんにちは。早速質問させて頂きます。 VB6.0からSQLServer 2000に、ADOで接続を行っています。 デ-タ更新時に、デ-タ単位でロックをかけたいのですが、どのように記述すればよいのか分かりません。 SELECT文だと、テ-ブル名の後ろに【WITH~】と記述するというのは分かったのですが、INSERT/UPDATE/DELETEの際はどのようにすればいいのでしょうか? もう一つ。 デ-タSELECT時に、項目にNULL値が入っていた場合、NULL以外の値で取得する方法はありますか?(Oracleにはあったような…) どなたか知識のある方、教えて下さい。 よろしくお願いします。

  • 秀丸での正規表現:複雑な条件を指定する場合 続き

    この質問は、 http://okwave.jp/qa/q8757880.html の続きです。 具体的な事を全然書いてませんでした。すみません。 Verilog-HDLというハードウェア記述言語での話です。 上記であげたパターンは、サブモジュールのインスタンス記述 (プログラムで言うサブルーチン呼び出しのようなもの)です。 サブモジュールのインスタンス記述を強調したいと思っていますが、それ以外にも always @(posedge clk)begin  if(xxx)begin   ...  end  else if(yyy)begin //←ここで誤検出   ...  end end というサブモジュールでない記述で誤マッチしてしまうのです。 話それてしまいますが always @(posedge clk)begin  if(xxx)begin   ...  end  else begin   if(yyy)begin    ...   end  end end とかけばよい、という手もあるのですが、他者のコードも受け入れる関係上、その手も難しいのが実情です。 話が前後してしまいましたがサブモジュールインスタンス記述は、 sub_mod_name instance_name ( .... のようになっており、1語目、2語目ともに任意の文字列となっています。 else ifともに言語上の予約語であり、これはインスタンス記述にはなり得ません。 『これにマッチする正規表現」かつ『else if(』にはマッチしないというのは、そもそも『ひとつの正規表現』では表せないのかと悩んでおります。 長くなりすみません。 なにか抜けている点などありましたらご指摘頂けると助かります。

  • イベント処理(コンポーネントの配列の場合)を簡単に記述したい

    i-appliをpanelで作成しています。 コンポーネントを配列にして配置した場合、 イベントを受け取るときには個別に処理を記述するしかないのでしょうか? ListBox[] lbox = new ListBox[16]; Button[] btn = new Button[16]; ... public void componentAction(Component w_component, int w_type, int w_param){   if(w_type == BUTTON_PRESSED) {     if(w_component == btn[0]){ ... }     else if(w_component == btn[1]){ ... }     ...     else if(w_component == btn[15]){ ... }     // ↑簡単に記述できないでしょうか?   }   if(w_type == SELECTION_CHANGED){     if(w_component == lbox[0]){ ... }     else if(w_component == lbox[1]){ ... }     ...     else if(w_component == lbox[15]){ ... }   } } よろしくお願いします。

  • SQLServerでの副問合せについて

    いつもお世話になります。 当方SQLServerをあまり使った事がなくSQLの組み方で少々てこずっております。そこでちょっとお知恵をお借りしたく質問致しました。 処理内容としましては、ある条件でテーブル内のデータを削除するって事なんですが、オラクルで記述するなら DELETE FROM AAAA WHERE (あああ,いいい) IN (SELECT あああ,いいい FROM BBBB GROUP BY あああ,いいい)  となるのですが、この構文をSQLServerで記述すると構文エラーとなってしまいます。 まあこの構文が実際には使えて私の記述がおかしいだけのかもしれないのですが、もし使えないのであればどのように記述すればよいのでしょうか? 申し訳ありませんが、宜しくお願いします。 ちなみにSQLServerは2000を使用しております。

  • 繰り返し処理で

    以下のEXCELデータを【Sheet1】に取り込む 【Sheet1】       A      B    C 1 2008/1/1 0:00  100  100 2 2008/1/1 1:00  100  100 3 2008/1/1 2:00  100  100 この時最終行のA3の文字列を変数に入れる ↓ 【Sheet1】の全セルをクリア ↓ 【2回目のデータ】        A     B    C 1 2008/1/1 2:00  100  100 2 2008/1/1 3:00  100  100 3 2008/1/1 4:00  100  100 この時,1回目のデータの最終行だったA3の文字列【2008/1/1 2:00】と 2回目のデータのA1【2008/1/1 2:00】を比較して、 同じであれば、A2行目から処理を開始 ※ もし比較して一致しなければ1行目から処理 ↓ 【Sheet1】の全セルをクリア ↓ 2回目のデータの最終行だったA3の文字列【2008/1/1 4:00】と 3回目のデータのA1文字列を比較 一致したら2行目から処理 ↓ これの繰り返し処理 マクロを作ってみたのですが、何かもっとこうしたほうがいい様な書き方あれば 教えていただきたく思っているのですが・・・; あとContinueに代わる、繰り返し関数?ってありますでしょうか? ------------------------------------------------------------------------------- Gyo = 100 x = Null For h = 1 To Gyo  If h = 1 Then    'nullでない場合     if x := "" then       'A1とxを比較して同じであればコンティニュー       If x = Sheets(SheetName).Cells(1,1) Then          continue '←Forに戻る       End If     End If   else if h = Gyo then     '最終A行のデータをx変数に格納      x = Sheets(SheetName).Range("A100").End(xlUp).Row   End If Next h -------------------------------------------------------------------------------

  • Verilog記述方法に関して

    以下のVerilog記述についてどの様な記述が一般的か教えてほしい のですが? QuartusIIにて合成を行っているのですが、 「Can't resolve multiple constant drive for net ****」の エラーメッセージが発生します。 記述は以下の様なもので、別々のクロックでalways内から同じ変数 に代入しています。これが問題の様ですが、これを回避するための 一般的な処理方法はどの様にすればよいのでしょうか? Verilog初心者で、この様な処理自体がナンセンスなのかもしれません が、どなたか分かる方御願い致します。 【抜粋のため分かり難いですが記述内容は以下の様なもの】 always@(posedge clkB) begin : ClrV<= 1'b1; : end always@(posedge clkA) begin : if(ClrV) ClrV<= 1'b0; : end 以上

  • verilog HDL のレジスタ記述について

    こんにちは verilog初心者です。論理合成をしていて気になる点があったので質問させていただきました。 二つのクロックの立ち上がりで書き込むレジスタを記述していて、 (全て1bit、clkはクロック) always @(posedge clk1 or posedge clk2) begin q <= d; end としたところ、シミュレーションはできますが論理合成はできませんでした。 自分の持っている参考書に「複数の書き込み信号があるレジスタはない」という記述があったので一応納得しました。 ところが、 always @(posedge clk1 or posedge clk2) begin if (clk1==1) q <= d; else if (clk2==1) q <= d; end と記述すると論理合成できてしまいます。 両者の書き込み信号に対する振る舞いは同じように思うのですが、一体何が違うのでしょうか。 わかる方いましたら是非ご教示下さい。よろしくお願いします。