Sitzungseinstellung zur Unterstützung indizierter Ansichten
-
27-10-2019 - |
Frage
Ich verwende indizierte Ansichten in meiner Datenbank.Der Client sollte also eine Sitzungsverbindungseinstellung haben, um sie aufzurufen.Ich verwende die ado.net-Verbindung, einen Befehl zum Aufrufen gespeicherter Prozeduren. Jedes Mal, wenn ich eine gespeicherte Prozedur aufrufen muss, erstelle ich eine Verbindung (ich hoffe, der Verbindungspool ermöglicht mir dies schnell) und führe einen Befehl aus, um diese Einstellungen auf die aktuelle Verbindung anzuwenden.
// 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();
}
Anderer Gedanke: Hinzufügen dieser Einstellungen vor jedem Aufruf der gespeicherten Prozedur:
command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...';
Diese Lösung verursacht einige Leistungsprobleme, nicht wahr?
Wie kann ich so zusätzliche Arbeit vermeiden, wenn ich jedes Mal eine neue Verbindung herstellen muss?Wie wende ich diese Einstellung automatisch an?
LÖSUNG:
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
Lösung
Gemäß der Dokumentation können Sie diese Einstellungen in der Datenbank festlegenStufe:
Mit ALTER DATABASE festgelegte Datenbankeinstellungen sind nur auf Datenbankebene gültig und werden nur wirksam, wenn sie explizit festgelegt werden.Die Datenbankeinstellungen überschreiben die Einstellungen der Instanzoptionen, die mit sp_configure festgelegt wurden.
Hast du das versucht?
Leider können diese Eigenschaften nicht in der Verbindungszeichenfolge festgelegt werden. Verwenden Sie daher diese SQL:
ALTER DATABASE dbname SET ANSI_NULLS ON -- etc