sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte zobrazení vázané na schéma na serveru SQL Server

Obvykle je dobrý nápad svázat schémata vaše pohledy na SQL Server.

Vazba schématu vašeho pohledu zajistí, že podkladové tabulky nebude možné změnit způsobem, který by ovlivnil pohled. Bez vazby schématu by mohly být základní tabulky nebo jiné objekty upraveny nebo dokonce odstraněny. Pokud k tomu dojde, zobrazení již nebude fungovat podle očekávání.

Chcete-li vytvořit pohled vázaný na schéma, použijte WITH SCHEMABINDING ve vašem T-SQL kódu pro vytvoření pohledu.

Příklad

Zde je příklad vytvoření pohledu vázaného na schéma:

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

Všimněte si, že při odkazování na tabulku v dotazu jsem použil dvoudílný název – použil jsem dbo.Cats místo pouze Cats . Toto je požadavek pro vazbu schématu na objekt. Pokud se pokusíte svázat objekt do schématu bez použití dvoudílných názvů, dostanete chybu.

Nyní, když jsem svůj pohled svázal schématem, pokud se pokusím zrušit tabulku, na kterou se odkazuje v její definici, zobrazí se chyba:

DROP TABLE Cats;

Výsledek:

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

Zde je to, co se stane, když se pokusím svázat zobrazení se schématem bez použití dvoudílného pojmenování:

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

Výsledek:

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.

Další atributy zobrazení

Více atributů lze oddělit čárkou. Nemusíte zadávat WITH pro každý atribut.

Pokud například chcete, aby byl pohled vázaný na schéma a šifrované, můžete provést toto:

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

  1. Obnovení ukázkové databáze DW AdventureWorksDW2019

  2. Selhání fulltextového vyhledávání mysql

  3. PL/SQL, jak uniknout jednoduchým uvozovkám v řetězci?

  4. Aktualizujte konfigurační soubor pomocí nového nastavení databáze