|
分類:[.NET 全般]
いつもお世話になっております。 困ったことがあり質問させていただきます。
■環境■ IIS7.0 SQLServer2008R2 ASP.NET C# VisualWebDeveloper2010
■問題■ SQLServerで戻り値のあるストアドプロシージャを作成し、 ASP側でDataClasses.dbmlにそのストアドプロシージャを ドラッグ&ドロップで追加すると以下の表示がされ、 引数が違うという事象で実質的にストアドプロシージャが 使用できません。
「次のストアドプロシージャの戻り値の型を検出できませんでした。 プロパティウィンドウで、それぞれのストアドプロシージャの 戻り値の型を設定して下さい。」
※プロパティウィンドウで手動で戻り値を設定することは可能でしたが、 実際にソースの中でこのストアドプロシージャを使用する時に 引数が違うという問題でストアドプロシージャは使用できませんでした。
■調査結果■ 試行錯誤してみた結果、ストアドプロシージャの中で カーソルを使用している部分をコメントアウトすると 問題は発生しませんでした。 しかしながら、カーソルで処理をする必要があるため、 カーソルを使用しつつ上記問題を回避する方法を探しています。
■参考情報(ソース)■ ALTER PROCEDURE [dbo].[SP_インデックス取得] @SQL VARCHAR(50), @KEY VARCHAR(50), @VALUE VARCHAR(100), @INDEX INT OUTPUT AS BEGIN ----@SQL(SELECT文)の結果で@KEY(列名)の内、@VALUE(値)が何番目に来るかを返す SET NOCOUNT ON;
DECLARE @COUNTER INT SET @COUNTER = 0; ----インデックス取得対象分ループ EXECUTE('DECLARE CUR_インデックス取得対象 CURSOR FOR ' + @SQL) OPEN CUR_インデックス取得対象 FETCH NEXT FROM CUR_インデックス取得対象 INTO @KEY WHILE (@@fetch_status = 0) BEGIN SET @COUNTER = @COUNTER + 1 IF @KEY = @VALUE BEGIN SET @INDEX = @COUNTER ----カーソルを閉じる CLOSE CUR_インデックス取得対象 DEALLOCATE CUR_インデックス取得対象 RETURN (0) END --FETCH(行の取り出し) FETCH NEXT FROM CUR_インデックス取得対象 INTO @KEY END
----カーソルを閉じる CLOSE CUR_インデックス取得対象 DEALLOCATE CUR_インデックス取得対象 ----ヒットしなかったら0を返す SET @INDEX = 0 RETURN (0) END
|