sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en Schema Bound View i SQL Server

Det är vanligtvis en bra idé att schemalägga dina vyer i SQL Server.

Schema som binder din vy säkerställer att de underliggande tabellerna inte kan ändras på ett sätt som skulle påverka vyn. Utan schemabindning kan de underliggande tabellerna eller andra objekt ändras eller till och med tas bort. Om det händer kommer vyn inte längre att fungera som förväntat.

För att skapa en schemabunden vy, använd WITH SCHEMABINDING i din T-SQL-kod för att skapa vyn.

Exempel

Här är ett exempel på hur du skapar en schemabunden vy:

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Observera att jag använde det tvådelade namnet när jag refererade till tabellen i min fråga – jag använde dbo.Cats istället för bara Cats . Att göra detta är ett krav för att schemabinda ett objekt. Om du försöker schemalägga ett objekt utan att använda tvådelade namn får du ett felmeddelande.

Nu när jag har schemalagt min åsikt, om jag försöker ta bort tabellen som refereras till i dess definition, får jag ett felmeddelande:

DROP TABLE Cats;

Resultat:

Msg 3729, Level 16, State 1, Line 1
Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.

Det här är vad som händer om jag försöker schemalägga vyn utan att använda tvådelad namngivning:

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM Cats;
GO

Resultat:

Msg 4512, Level 16, State 3, Procedure v_Cats, Line 5
Cannot schema bind view 'dbo.v_Cats' because name 'Cats' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.

Andra vyattribut

Flera attribut kan separeras med kommatecken. Du behöver inte ange WITH för varje attribut.

Till exempel, om du vill att vyn ska vara schemabunden och krypterad kan du göra detta:

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING, ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

  1. MySQL-index – vilka är de bästa metoderna?

  2. JDBC Statement Exempel – Batch Infoga, Uppdatera, Ta bort

  3. MySQL Master To Master Replikering

  4. Revision i Oracle