sql >> Database >  >> RDS >> Sqlserver

Een schemagebonden weergave maken in SQL Server

Het is meestal een goed idee om uw weergaven in SQL Server te binden.

Schema dat uw weergave bindt, zorgt ervoor dat de onderliggende tabellen niet kunnen worden gewijzigd op een manier die de weergave zou beïnvloeden. Zonder schemabinding kunnen de onderliggende tabellen of andere objecten worden gewijzigd of zelfs verwijderd. Als dat gebeurt, werkt de weergave niet meer zoals verwacht.

Om een ​​schemagebonden weergave te maken, gebruikt u de WITH SCHEMABINDING in uw T-SQL-code voor het maken van de weergave.

Voorbeeld

Hier is een voorbeeld van het maken van een schemagebonden weergave:

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

Merk op dat ik de tweedelige naam gebruikte bij het verwijzen naar de tabel in mijn zoekopdracht - ik gebruikte dbo.Cats in plaats van alleen Cats . Dit is een vereiste om een ​​object via een schema te binden. Als u een object via een schema probeert te binden zonder tweedelige namen te gebruiken, krijgt u een foutmelding.

Nu ik mijn weergave schema heb gebonden, krijg ik een foutmelding als ik probeer de tabel waarnaar in de definitie wordt verwezen te laten vallen:

DROP TABLE Cats;

Resultaat:

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

Dit is wat er gebeurt als ik probeer de weergave schema te binden zonder tweedelige naamgeving te gebruiken:

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

Resultaat:

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.

Andere kenmerken bekijken

Meerdere attributen kunnen worden gescheiden door een komma. U hoeft WITH niet op te geven voor elk attribuut.

Als u bijvoorbeeld wilt dat de weergave schemagebonden is en versleuteld, kunt u dit doen:

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

  1. Oracle Database Link - MySQL-equivalent?

  2. CURRENT_TIME Voorbeelden – MySQL

  3. Een vastgelegde transactie terugdraaien

  4. Wat is de betekenis van SELECT... FOR XML PATH(' '),1,1)?