重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

色々試したのですが、再現したりしなかったりで???状態です。

下記の状態は確認できたので質問したいと思います。
勤怠コードのクロス集計の為の実験をしています。
エクセル出力する形で実行しています。
必ず三つ目のexec命令を通っています。・・・経路をテーブルに出力して確認済み
結果はT_日報の件数が出力されています。・・・これはOK
しかし列名が「xx」になってしまいます。・・・NG(「A0」にしたい)
フィールドに値が入っていません・・・NG
---------------------------------------------------
BEGIN
if 'B0'='B1'
  begin
  exec sp_executesql N'SELECT 勤怠コード AS xx FROM T_勤怠'
  end

if 'B0'='A0'
  begin
  exec sp_executesql N'SELECT 勤怠コード AS B0 FROM T_勤怠'
  end
else
  begin
  exec sp_executesql N'SELECT 勤怠コード AS A0 FROM T_日報'
  end
END
------------------------------------------------------
よろしくお願いします。

A 回答 (2件)

構文はあっていますが、ここに開示されている情報が理由ではないと思います。

同じ環境ではないでしょうが、再現させられないですからね。

少なくとも
・ここに開示されているソースだけでも再現するか
・動的クエリでない状態でストアド単体でクエリアナライザで実行しても再現するか
・動的クエリの状態でストアド単体でクエリアナライザで実行しても再現するか
・動的クエリ部分を普通のSELECTにしても再現するか
・動的クエリ部分を動的SQLでないストアドプロシージャにしてEXECする形に変更しても再現するか
・出力先をCSVやACCESSのテーブルにしても再現するか
といったあたりの切り分けはできているんですよね?

単体実行で再現するとは思えないので、OLEとの相性になってくるのかもしれません。
(BCPで動的SQLを使うな、という話は前に技術情報に出ていましたので、動的SQLでうまくいかないケースが他にあってもおかしくはない)

この回答への補足

・ここに開示されているソースだけでも再現するか・・・再現する
・動的クエリでない状態でストアド単体でクエリアナライザで実行しても再現するか・・・未検証
・動的クエリの状態でストアド単体でクエリアナライザで実行しても再現するか・・・未検証
・動的クエリ部分を普通のSELECTにしても再現するか・・・再現する
・動的クエリ部分を動的SQLでないストアドプロシージャにしてEXECする形に変更しても再現するか・・・再現する
・出力先をCSVやACCESSのテーブルにしても再現するか・・・未検証

未検証だった、クエリアナライザで実行したら、正常な結果を返しました。
SQL Server側の問題ではなさそうですので、動的クエリ使わない方法、
もしくはこの習性をふまえて別の動的クエリを再度検討してみます。
また質問するかと思いますが、よろしくお願いします。

ありがとうございました。

補足日時:2009/09/15 14:02
    • good
    • 0
この回答へのお礼

複数のSELECT分や複雑なストアドにアクセスが対応できていない時の
現象のようで、根本的な解決策はありませんでした。

色々、ありがとうございました。

お礼日時:2009/09/17 16:04

1番目の if の END は何処?


以下のようになってるじゃないの?

if 'B0'='B1'
  begin
  exec sp_executesql N'SELECT 勤怠コード AS xx FROM T_勤怠'
  end
  if 'B0'='A0'
    begin
    exec sp_executesql N'SELECT 勤怠コード AS B0 FROM T_勤怠'
    end
  else
    begin
    exec sp_executesql N'SELECT 勤怠コード AS A0 FROM T_日報'
    end

この回答への補足

ストアドもIFに対してENDが必要ですか?
beginに対するendと考えていましたが・・・

if 'B0'='A0'の前に END を入れるとエラーになります。

どちらにしても三つ目のexecを通っているのに別名は最初の「xx」になります。
ひょっとしたら別名は最初に出現した物になってしまうのでしょうか?
だとしても、文字列としての記述にも関わらず「xx」になってしまうのは
どうしてでしょうか?

補足日時:2009/09/15 12:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す