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