SQL: Index über ein View? Schemabinding ist die Lösung – aber nicht immer…

Schemabindung ist sehr interessant, weil dann komplexe Views plötzlich schnell aufgerufen werden können. Aber hat auch Voraussetzungen und sogar Nachteile haben. Z.B. sind dann alle Tabellen, die auf den View zugreifen gesperrt , gegen struktureller Änderungen. Das bedeutet, wenn ein neues Feld in die Tabelle soll, muss der/die View/s gelöscht werden und dann wieder angelegt werden. Die alle Indizes, dieser betroffenen View/s müssen dann auch wieder angelegt werden.

Voraussetzungen sind recht komplex und sind in der Quelle reichlich beschrieben. Aber es wird keine Fehlermeldung geben, lediglich kann es sein, dass der „View with schemabinding“ lediglich die Daten nicht persistent speichert.

Aber damit man ganz schnell feststellen kann welche SET-Options im System eingerichtet sind ist in einer „neuen“ SSMS-Query hiermit leicht abfragen:

SELECT 
SESSIONPROPERTY ('NUMERIC_ROUNDABORT')  as "NUMERIC_ROUNDABORT soll 0",
SESSIONPROPERTY ('ANSI_PADDING') as "ANSI_PADDING soll 1", 
SESSIONPROPERTY ('ANSI_WARNINGS') as "ANSI_WARNINGS soll 1", 
SESSIONPROPERTY ('CONCAT_NULL_YIELDS_NULL') as "CONCAT_NULL_YIELDS_NULL soll 1",
SESSIONPROPERTY ('ARITHABORT') as "ARITHABORT soll 1",
SESSIONPROPERTY ('QUOTED_IDENTIFIER') as "QUOTED_IDENTIFIER soll 1" ,
SESSIONPROPERTY ('ANSI_NULLS') "ANSI_NULLS soll 1"

https://docs.microsoft.com/de-de/sql/relational-databases/views/create-indexed-views?view=sql-server-2017