0

C#コードからストアドプロシージャを呼び出しています。このSPは、いくつかの値を格納するための一時テーブルを作成します。クエリアナライザからこのSPを実行すると、すべてが正常に見えます。しかし、C#コードから実行すると、一時テーブルが作成されません。

#tableNameではなく@tableNameを使用しています。

一時テーブルは、ストアドプロシージャでのみ参照されています。SPの外部では必要ありません。 ここに画像の説明を入力してください 私が見逃しているものはありますか?

4

2 に答える 2

0

一時テーブルはセッションの終了時に自動的に削除されますが、C#コードが終了すると削除されるだけではありませんか?詳細については、ドキュメントを確認してください。

于 2012-05-08T08:33:25.910 に答える
0

これは、クエリアナライザーで使用しているユーザークレデンシャル(「sa」は多分?)が、C#アプリケーションで使用されているものとおそらく同じではないために発生します。

ユーザーは、ストアドプロシージャが呼び出されたときに、システムデータベースのtempdb(読み取り/書き込み)にアクセスできる必要があります。アクセスできない場合は、これらの一時テーブルを(プロシージャ内で)作成できません。

C#が使用するユーザーにtempdbへのアクセスを許可するか、Query Analyzerで使用するのと同じユーザー(または他のdbadminユーザー)でC#アプリのログインをテストして、動作をテストします。

ステートメントごとにSQLプロファイラーについて尋ねるあなたのコメントによると。

ステップ1:SQLプロファイラーを開き、新しいトレースを作成します。タブイベントの選択に移動します。セキュリティ監査とセッションのマークを外します

ここに画像の説明を入力してください

ステップ2:右下の[すべてのイベントを表示する]チェックボックスをオンにすると、グリッドにいくつかのイベントが表示されます。ストアドプロシージャとT-SQLに移動し、下のスクリーンショットにあるものにマークを付けます。

ここに画像の説明を入力してください

ステップ3:それを実行します。

于 2012-05-08T08:48:13.923 に答える