0

この問題で見落としている些細なことがあると思います。ストアドプロシージャを呼び出しています。プロファイラーで確認できるように呼び出しが行われていることを知っています。クエリアナライザーからストアドプロシージャを実行すると、レコードが返されます。意図した通り。問題は、C#コードから呼び出すと、実行は行われていますが、結果が取得されないことです。

私のデバッグで明らかになったのは、ストアドプロシージャにOBJECT_ID('tempdb .. ## base')IS NOTNULLドロップテーブル##baseなどのコードがある場合、OdbcDataReaderを使用してデータを返さないことです。データを返す、これがなぜなのか誰かに教えてもらえますか?

ありがとう

4

1 に答える 1

0

.NET に返される結果は、プロシージャで SELECT を発行した最後のステートメントの結果であることに注意してください。OBJECT_ID クエリが、データを返したい SELECT ステートメントの後にある場合、おそらく結果が得られません。

ただし、確実に伝えるには、ストアドプロシージャを確認する必要があります。

SET QUOTED_IDENTIFIER ON 
GO

SET ANSI_NULLS ON 
GO

ALTER         PROCEDURE dbo.proc_myStoredProc
AS

if OBJECT_ID ('tempdb..##base') IS NOT NULL drop table ##base
SELECT * FROM mytable
GO

SET QUOTED_IDENTIFIER OFF 
GO

SET ANSI_NULLS ON 
GO

上記の drop table ステートメントを削除すると、データが取得されます。

一時テーブルを確認して削除する方法

http://blog.sqlauthority.com/2009/05/17/sql-server-how-to-drop-temp-table-check-existence-of-temp-table/

于 2012-06-12T21:54:46.470 に答える