Configuración de sesión para admitir vistas indexadas
-
27-10-2019 - |
Pregunta
Estoy usando vistas indexadas en mi base de datos.Por lo que el cliente debe tener alguna configuración de conexión de sesión para llamarlos.Estoy usando la conexión ado.net, comando para llamar a procedimientos almacenados. Cada vez que tengo que llamar a un procedimiento almacenado, creo una conexión (espero que el grupo de conexiones me permita hacer esto rápidamente) y ejecuto un comando para aplicar esta configuración a la conexión actual.
// 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();
}
Otro pensamiento: agregar estas configuraciones antes de cada llamada del procedimiento almacenado:
command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...';
Esta solución causa algunos problemas de rendimiento, ¿no es así?
¿Cómo puedo evitar tanto trabajo extra si tengo que crear una nueva conexión cada vez?¿Cómo aplicar esta configuración automáticamente?
<×SOLUCIÓN:
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
Solución
De acuerdo con la documentación , puede establecer estas configuraciones en la base de datosnivel:
La configuración de la base de datos establecida mediante ALTER DATABASE es válida solo en el nivel de la base de datos y surte efecto solo si se establece explícitamente.La configuración de la base de datos anula la configuración de la opción de instancia que se establece mediante sp_configure.
¿Intentaste eso?
Desafortunadamente, estas propiedades no se pueden establecer en la cadena de conexión, así que use este sql:
ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc