Настройка сеанса для поддержки индексированных представлений

StackOverflow https://stackoverflow.com/questions/7330684

Вопрос

Я использую индексированные представления в моей базе данных. Таким образом, клиент должен иметь некоторую настройку подключения сеанса для их вызова. Я использую соединение 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top