web-dev-qa-db-ja.com

「ストアドプロシージャが見つかりませんでした」

SQL Server 2005バックエンドを備えた古典的なASP Webサイトを保守しています。小さな機能のために、挿入を行うストアドプロシージャを作成しました。これは、データベース。

コードからストアドプロシージャを呼び出そうとすると、次のエラーが表示されます。

 Microsoft OLE SQL Server for DB Provider error '80040e14' 
ストアドプロシージャ 'InsertGroup'が見つかりませんでした。
/newGroup.asp、行84 

DBはSQL Server認証を使用します。接続文字列と同じuser/pwを使用してVisual StudioのDBサーバーに接続すると、ストアドプロシージャは表示されませんが、すべてのテーブルが表示されます。

ユーザーには、データリーダーとデータライターの役割があり、ストアドプロシージャの明示的な実行権限があります。

私は何が欠けていますか?

更新:申し訳ありませんが、サーバー管理者は、実際には2005サーバー(Windows Server 2003 x64で実行)であるのに、2000サーバーであると誤解しました。

16
Chloraphil

恥の散歩:

接続文字列はライブデータベースを指しています。エラーメッセージは完全に正確でした。ストアドプロシージャはdev DBにのみ存在していました。すばらしい答えを提供してくれたすべての人に感謝します。そして、あなたの時間を無駄にしたことに対する私の謝罪。

56
Chloraphil

ストアドプロシージャの実際の所有者を確認する必要がある場合があります。特定の別のユーザーである場合は、アクセスできない理由です。

8
Robin Day

これは、パラメータを使用して呼び出されるストアドプロシージャがある場合にも発生することがあります。たとえば、次のように入力した場合:

set @runProc = 'dbo.StoredProcedure'
 exec @runProc

これは動作しますが、しかし:

set @runProc = 'dbo.StoredProcedure ''foods'''
exec @runProc

これにより、「ストアドプロシージャdbo.StoredProcedure 'foods'が見つかりませんでした」というエラーがスローされますが、これはparanthesesで簡単に克服できます。

set @runProc = 'exec dbo.StoredProcedure ''foods'''
exec (@runProc)
3
prozilla

2つの原因があります。

1-ストアドプロシージャ名コードでストアプロシージャを宣言するときは、次のようにキーワードを実行したり実行したりしないでください。

C#

_string sqlstr="sp_getAllcustomers";// right way to declare it.

string sqlstr="execute sp_getAllCustomers";//wrong way and you will get that error message.
_

このコードから:

MSDBHelp.ExecuteNonQuery(sqlconexec, CommandType.StoredProcedure, sqlexec);

_CommandType.StoreProcedure_はストアプロシージャ名のみを探し、ExecuteNonQueryは舞台裏でストアプロシージャを実行します。

2-接続文字列:

別の原因は、間違った接続文字列です。接続文字列の中を見て、特にデータベース名などの接続があることを確認してください。

2
Talley

スキーマ名が接続文字列に含まれていることを確認しますか?

2
DForck42

私が持っていた:

使用[wrong_place]

行く

宣言する..

1
AJ AJ

チェックするもう一つの可能​​性。それは私に起こったばかりで言及されなかったため、ここにリストします;-)

名前の末尾に誤ってスペース文字を追加してしまった。やっと気づくまでに何時間も試しました。あなたがそれを理解した後、それは常に簡単なものです。

0
Ken.Shipman

同じ問題がありました。最終的に私は理由を見つけました。 Webのコードを使用して、手順の出力をテストしました。最後にDrop(procedure)への呼び出しがあったので、自分で削除しました。

0
Pati K

ストアドプロシージャが見つかりませんでしたか?----これを取得したとき....このようなコード

String sp="{call GetUnitReferenceMap}";

stmt=conn.prepareCall(sp);

ResultSet rs = stmt.executeQuery();

while (rs.next()) {

currencyMap.put(rs.getString(1).trim(), rs.getString(2).trim()); 

4つのDB(sample1、sample2、sample3)がありますが、stmtが検索する場所はmasterデフォルトDBであり、例外が発生します。

dB名を指定して、問題が解決する場合::

String sp="{call sample1..GetUnitReferenceMap}";
0
Rama Krishna