Настройка сеанса для поддержки индексированных представлений
Я использую индексированные представления в моей базе данных. Таким образом, клиент должен иметь некоторую настройку сеансового соединения для их вызова. Я использую соединение 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
1 ответ
Согласно документации, вы можете установить эти параметры на уровне базы данных:
Настройки базы данных, заданные с помощью ALTER DATABASE, действительны только на уровне базы данных и вступают в силу только в случае явного задания. Настройки базы данных переопределяют параметры опций экземпляра, которые устанавливаются с помощью sp_configure.
Ты пробовал это?
К сожалению, эти свойства не могут быть установлены в строке подключения, поэтому используйте этот sql:
ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc