データベースでインデックス付きビューを使用しています。したがって、クライアントには、それらを呼び出すためのセッション接続設定が必要です。私はado.net接続、コマンドを使用してストアドプロシージャを呼び出しています。ストアド プロシージャを呼び出す必要があるたびに、接続を作成し (接続プールでこれをすばやく実行できることを願っています)、これらの設定を現在の接続に適用するコマンドを実行します。
// some code to create a new connection
//...
//...
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
using (var cmd = connection.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText =
@"
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF";
cmd.ExecuteNonQuery();
}
その他の考え:ストアドプロシージャのすべての呼び出しの前にこれらの設定を追加します:
command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...';
この解決策はパフォーマンスの問題を引き起こしますね。
毎回新しい接続を作成する必要がある場合、どうすれば余分な作業を避けることができますか? これらの設定を自動的に適用する方法は?
解決:
ALTER DATABASE [MyDB]
SET
ANSI_NULLS ON,
ANSI_PADDING ON,
ANSI_WARNINGS ON,
ARITHABORT ON,
CONCAT_NULL_YIELDS_NULL ON,
QUOTED_IDENTIFIER ON,
NUMERIC_ROUNDABORT OFF