Настройка сеанса для поддержки индексированных представлений - PullRequest
2 голосов
/ 07 сентября 2011

Я использую индексированные представления в моей базе данных. Таким образом, клиент должен иметь некоторую настройку сеансового соединения для их вызова. Я использую соединение 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 Ответ

5 голосов
/ 07 сентября 2011

Согласно документации , вы можете установить эти параметры на уровне базы данных:

Настройки базы данных, заданные с помощью ALTER DATABASE, действительны только на уровне базы данных и вступают в силу только в случае явной установки. Настройки базы данных переопределяют параметры опций экземпляра, которые устанавливаются с помощью sp_configure.

Вы пробовали это?

К сожалению, эти свойства нельзя установить в строке подключения, поэтому используйте этот sql:

ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc
...