2016-05-19 4 views
0

を使用してストアドプロシージャを実行しながら、sp_executesqlのを削除します。私はEntity Frameworkのを使用してストアドプロシージャを実行すると、それは構文の下に生成Entity Frameworkの

exec sp_executesql N'EXEC test @CityIds',N'@CityIds nvarchar(1)',@CityIds=N'1' 

を当社のDBAは、クエリのこれらの並べ替えと懸念を提起し、取得したいましたsp_executesqlを削除します。

クエリは次のようになります。

exec test @CityIds=1 

これを達成するために、エンティティフレームワークでは、さまざまな方法は何を?

+0

**懸念はDBAは全く何をしましたか?これは、**完全に安全な**、パラメータ化されたクエリです。何について不平を言いますか?私はこの行動を変えるようにEFに伝える方法を知らない..... –

+0

私はあなたの意見に同意します。しかし、DBAは、sp_executesqlがそのクエリを動的クエリとして作成し、実行計画のキャッシュに役立たないことを期待していました。 動的クエリを使用せずに作成できる回避策はありますか? –

+0

*** *** ***動的クエリです!これはパラメータ値を使って実行される単純な**適切にパラメータ化された**標準T-SQLクエリです。 ** **私が知る限り、EFにはこの動作を「切り換える」ものはありません。**一般的に受け入れられている**ベストプラクティス**の後に** SQL Serverに対して**パラメータ化されたクエリ**を実行します。 –

答えて

1

エンティティ・フレームワーク/ ADO.netでのsp_executesqlの使用は意図的です。生成されたSQLでは、EFが問合せの直接実行とsp_executesqlの使用の間に非常に決定的になることがありました。sp_executesqlは、 1つのパラメータ化されたコンパイル済みプランの再利用を支援するクライアント側のパラメータ化です。パラメータが指定されていない場合、SQL Serverはクエリプランの再利用を支援する自動パラメータ化を実行しようとします。クエリParameterizationここで、スレッドの意志以下execution pattern

希望について

詳しい情報はEFでsp_executesqlをするのではなく、EXECを使用する方法についてあなたを助けます。

SQL Server Recognise SP_EXECUTESQL as object rather than Procedure Name

関連する問題