sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en skemabundet visning i SQL Server

Det er normalt en god idé at skemabinde dine synspunkter i SQL Server.

Skema, der binder din visning, vil sikre, at de underliggende tabeller ikke kan ændres på en måde, der ville påvirke visningen. Uden skemabinding kan de underliggende tabeller eller andre objekter ændres eller endda slettes. Hvis det sker, vil visningen ikke længere fungere som forventet.

For at oprette en skemabundet visning skal du bruge WITH SCHEMABINDING i din T-SQL-kode for at oprette visningen.

Eksempel

Her er et eksempel på oprettelse af en skemabundet visning:

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

Bemærk, at jeg brugte det todelte navn, når jeg refererede til tabellen i min forespørgsel – jeg brugte dbo.Cats i stedet for bare Cats . At gøre dette er et krav for skemabinding af et objekt. Hvis du forsøger at skemabinde et objekt uden at bruge todelte navne, får du en fejl.

Nu hvor jeg har bundet mit synspunkt, får jeg en fejl, hvis jeg forsøger at droppe tabellen, der henvises til i dens definition:

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'.

Her er, hvad der sker, hvis jeg forsøger at skemabinde visningen uden at bruge todelt navngivning:

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.

Andre visningsattributter

Flere attributter kan adskilles med et komma. Du behøver ikke at angive WITH for hver egenskab.

For eksempel, hvis du ønsker, at visningen skal være skemabundet og krypteret, kan du gøre dette:

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

  1. mysql-forespørgsel viser flere tabeller fra én ID-kolonne

  2. Effektiv overvågning af MySQL med SCUMM Dashboards:Første del

  3. Sådan får du flere optællinger med en enkelt forespørgsel i MySQL

  4. GROUP_CONCAT med grænse