- ベストアンサー
SQL側の一時テーブルをAccessのレポートにするには?
- SQL Server 2005 + Access(adp) にてDBを作成しています。あるレポートのサブレポートに一時テーブルの値を使用したいのですが、表示されません。Access側のクエリを開こうとすると、ストアドプロシージャは実行されましたが、レコードは返されませんでしたという結果が返ってきます。SQL側の一時テーブルをAccessのレポートのソースにするにはどうしたらいいのでしょうか?教えてください。
- ダイレクトにサブレポートを作成すると、メインレポートとリンクしません。新規にテーブルを作成したものは、メインレポートとサブレポートがリンクします。しかしあるレポートのためだけに、二重にテーブルを作成したくありません。一時テーブルで済ませられるのなら、そうしたいと思います。よろしくお願いします。
- 伝票分の業者請求書 レポートに表示する ALTER procedure [dbo].[S_業者請求伝票分R] @myid int as begin ---一時テーブルの作成 create table #業者請求 (kr発注物件ID int, kr発注ID int, kr業者請求日 datetime, kr業者請求額 money, kr最終支払 smallint, kr請求メモ nvarchar(7),kr会社名 nvarchar(30),kr特記 nvarchar(20),kr受注登録ID int) ---一時テーブルに値を代入 insert into #業者請求(kr発注物件ID, kr発注ID, kr業者請求日, kr業者請求額, kr最終支払, kr請求メモ,kr会社名,kr特記,kr受注登録ID) SELECT hh.発注物件ID, ga.発注ID, ga.業者請求日, ga.業者請求額, ga.最終支払, ga.請求メモ,zz.会社名,hh.特記,hh.受注登録ID FROM dbo.T_業者請求 AS ga left outer JOIN dbo.T_発注 AS hh ON ga.発注ID = hh.発注ID INNER JOIN dbo.T_住所 AS zz ON hh.会社ID = zz.会社ID where hh.受注登録ID=@myid end begin select * from #業者請求 end
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
adpのソースにストアドが使えるかどうかは確認していませんが、Jetの場合、ストアドの先頭には「SET NOCOUNT ON」を切らないと、レコードより先にメッセージが返されて結果行がゼロになります。 ALTER procedure [dbo].[S_業者請求伝票分R] @myid int as begin の直後に「SET NOCOUNT ON」を足してみてください。 #もしこれで解決するなら、そもそも一時テーブル作る必要ないかもしれませんけど
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
SET NOCOUNT OFFは不要です。 ストアドプロシージャ内で切ると、その中でだけ有効です。 ついでですが、ストアドが中で一度終わっている理由はなんでしょう? 中のend/beginは必要ないように見えます。 更にいうと、一時テーブルを作成せず、select文だけ書いても同じ結果になるような気がします。 (つまり、この部分だけ) ALTER procedure [dbo].[S_業者請求伝票分R] @myid int as begin set nocount on SELECT hh.発注物件ID, ga.発注ID, ga.業者請求日, ga.業者請求額, ga.最終支払, ga.請求メモ,zz.会社名,hh.特記,hh.受注登録ID FROM dbo.T_業者請求 AS ga left outer JOIN dbo.T_発注 AS hh ON ga.発注ID = hh.発注ID INNER JOIN dbo.T_住所 AS zz ON hh.会社ID = zz.会社ID where hh.受注登録ID=@myid end
お礼
>SET NOCOUNT OFFは不要 了解です。 そうですね。もしかしたら、Select文だけでできるかもしれません。 SET NOCOUNT on なしでは何度やってもうまくいかず、 これはリンクキーの問題だと思っていました。 (メインレポートにリンクするサブレポートのキーに、メインキーにはない キーが入っているため) 明日テストして報告します。 重ね重ねありがとうございます。
補足
上記を実行した所、レポートの表示はされますが、サブレポートとしてメインレポートにリンクされません。 メインレポートの数、サブレポートのすべてが表示されてしまいます。 これは「SET NOCOUNT ON」がない状態と同じです。 又、一時テーブルを使用したSQL文でも同じ結果でした。 新規にテーブルを作成した内容については、メインレポートとリンクするので、一時テーブルでもOKかと思ったのですが・・・ 専用のテーブルを用意し、UPDATEでその都度入力させることにします。 しかし「今回は一時テーブルをAccess側に表示させる」という質問ですので、それについては解決しましたので終了と致します。 amshid6さん、本当に有難うございました。 (Where文に省略がありました。 (where hh.受注登録ID=@myid) and (hh.発注物件ID>600000) )
お礼
ひぇ~! できました!! 私はてっきりAccess側でSQLの呼び出しとか何とかが必要だと思っていました。 jamshid6さん ありがとうございます。 追加質問で、 この「SET NOCOUNT ON」に対応する「OFF」は必要ないのでしょうか?