色々試したのですが、再現したりしなかったりで???状態です。
下記の状態は確認できたので質問したいと思います。
勤怠コードのクロス集計の為の実験をしています。
エクセル出力する形で実行しています。
必ず三つ目の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
------------------------------------------------------
よろしくお願いします。
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」になってしまうのは
どうしてでしょうか?
お礼
複数のSELECT分や複雑なストアドにアクセスが対応できていない時の 現象のようで、根本的な解決策はありませんでした。 色々、ありがとうございました。
補足
・ここに開示されているソースだけでも再現するか・・・再現する ・動的クエリでない状態でストアド単体でクエリアナライザで実行しても再現するか・・・未検証 ・動的クエリの状態でストアド単体でクエリアナライザで実行しても再現するか・・・未検証 ・動的クエリ部分を普通のSELECTにしても再現するか・・・再現する ・動的クエリ部分を動的SQLでないストアドプロシージャにしてEXECする形に変更しても再現するか・・・再現する ・出力先をCSVやACCESSのテーブルにしても再現するか・・・未検証 未検証だった、クエリアナライザで実行したら、正常な結果を返しました。 SQL Server側の問題ではなさそうですので、動的クエリ使わない方法、 もしくはこの習性をふまえて別の動的クエリを再度検討してみます。 また質問するかと思いますが、よろしくお願いします。 ありがとうございました。