アプリ版:「スタンプのみでお礼する」機能のリリースについて

2008です。
有給休暇の使用日(複数)を文字列として、一つのフィールドに入れる
仕組みを作ろうとしています。
(4/1、6/20、6/21 8/30・・・・・てな感じです)

動的SQLでパラメータに値を代入する方法によって結果が変わってしまいます。

現象1
パラメータに代入(Set)するときに「'A0'」をセットすると正常に動きますが、
「(Select Max(コード) From テーブル Where コード='A0')」にすると
パラメータの入力を求められます。

しかし後者をIf文の中で代入するとパラメータの入力は求められません(下記)

if Select Max(コード) From テーブル Where コード='A0' = 'V0'
  set @para = 'V0'
else
  begin
  set @para = (Select Max(コード) From テーブル Where コード='A0')
  end
**********@paraを使う動的SQL***********

現象2
上記のIf文でパラメータを代入後、動的SQLの直前に@paraの値を確認の為
テーブルに書き込む(Insert)と動的SQLの結果が無くなってしまいます。
動的SQLの後にも書込を入れてみましたが、同じ値が書き込まれています。
当然、直前の書込を無くせば正常に表示されます。

何とか動作するのですが納得できず、将来に禍根を残しそうな現象であり
どうするべき(スルーするべき)か悶々としています。

A 回答 (2件)

なんだかやっていることに関する記述がかなり端折られている感じで、読解力がいりますね。



5回読んで考えましたが、現象1は内容が理解できません。
現象2はたぶん「SET NOCOUNT ON;を切ってないのでは?」

この回答への補足

すいません、端折りすぎですね、長くなると見にくいと思ったのですが、
これでは意味不明ですね・・・

月曜日にきちんとしたストアドと画面のハードコピーを載せますので
よろしくお願いします。

「SET NOCOUNT ON;を切ってないのでは?」は試してみます、ありがとうございました。

補足日時:2009/09/12 21:11
    • good
    • 0
この回答へのお礼

「SET NOCOUNT ON」を入れても結果は変わりませんでした。

「SET NOCOUNT ON」は行数を返さない為、効率が良くなると理解しましたが、
効率UP以外にどんなことが期待できるのでしょうか?

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

レガシーADOのように結果セットを複数受け取れない場合には、「○行更新されました」というメッセージ自体を1つの結果セットとして先に受け取ってしまうため、後続の結果セットが受け取れない可能性があります。


少なくとも、私の読解力では「動的SQLの結果が無くなってしまいます」はそのように読めたということです。

いずれにしても、質問者さんのようにMSのサポート体制が微妙な組み合わせ(Access ADP 2003 & SQL Server 2008でしたよね)で開発をしていて、不明な現象をどうしても追求したい場合、少なくともトラブルシューティングのための検証ステップが3つは足らないと思います。

・クエリアナライザでの単体検証
・Access 2003(MDB)でデータソースのプロバイダを「SQLOLEDB(SQL Server)」にした環境
・Access 2003(MDB)でデータソースのプロバイダを「SQLNCLI10(SQL Native Client 10.0)」にした環境
今の方法では、SQL Serverが悪いのか、データプロバイダが悪いのか、組み合わせが悪いのか、切り分けできませんよね。
    • good
    • 0
この回答へのお礼

ありがとうございました、勉強になりました。

お礼日時:2009/09/21 13:14

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