SQLストアドプロシージャの一時テーブルから返された列を認識するC#クエリコンポーネントを取得するにはどうすればよいですか
-
03-07-2019 - |
質問
次のようなストアドプロシージャを作成しました(このカットダウンバージョンを使用して、問題を把握しようとしています)。
CREATE PROCEDURE bsp_testStoredProc
AS
BEGIN
CREATE TABLE #tmpFiles
(
AuthorName NVARCHAR(50),
PercentageHigh INT
)
-- Insert data into temp table
SELECT AuthorName, PercentageHigh FROM #tmpFiles
ORDER BY PercentageHigh DESC
DROP TABLE #tmpFiles
RETURN 0
END
VS2008のC#コードから、クエリコンポーネントと Use Existing Stored Procedure オプションを使用して、これをDataTable / DataGridViewに接続して結果を表示しようとしています。
ただし、一時テーブルから選択しているため、Visual Studioはクエリコンポーネントプロパティにストアドプロシージャから返される列を表示しません。 SPは実際のスキーマに基づいていないため、使用されているデータ型の判別に問題があると思われます。
実際のテーブルから選択するさまざまなストアドプロシージャに接続すると、列が正しく表示されます。
このことを知っている人はいますか?返されるデータの種類を明示的に指定するためにどこかに追加できるヒントがありますか?
事前に感謝します。
解決
詳細については、「テーブル変数」の使用を検討してください。一時テーブルではなく(つまり#FOOではなく@FOO)-これは少し役立つかもしれませんし、確かにいくつかのtempdbの問題にも役立ちます。
一時テーブルの場合-いいえ、SPスキーマを明示的に宣言する方法はありません。おそらく、ラッパークラスを生成するときにSPの簡易バージョンを使用することをお勧めします。つまり、正しい形状の単純なSELECTを実行させます。
別の方法として、LINQを使用してUDFを使用します。UDFは明示的なスキーマを持っています。
所属していません StackOverflow