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

Creare una vista associata allo schema in SQL Server

Di solito è una buona idea associare a uno schema le tue viste in SQL Server.

L'associazione dello schema alla tua vista assicurerà che le tabelle sottostanti non possano essere modificate in un modo che potrebbe influire sulla vista. Senza l'associazione dello schema, le tabelle sottostanti o altri oggetti potrebbero essere modificati o addirittura eliminati. In tal caso, la visualizzazione non funzionerà più come previsto.

Per creare una vista associata allo schema, utilizza WITH SCHEMABINDING nel codice T-SQL per creare la vista.

Esempio

Ecco un esempio di creazione di una vista associata allo schema:

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

Nota che ho usato il nome in due parti quando ho fatto riferimento alla tabella nella mia query:ho usato dbo.Cats invece di solo Cats . Questa operazione è un requisito per lo schema vincolante di un oggetto. Se provi a associare allo schema un oggetto senza utilizzare nomi in due parti, riceverai un errore.

Ora che ho associato lo schema alla mia vista, se provo a eliminare la tabella a cui si fa riferimento nella sua definizione, ottengo un errore:

DROP TABLE Cats;

Risultato:

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

Ecco cosa succede se provo a associare lo schema alla vista senza utilizzare la denominazione in due parti:

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

Risultato:

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.

Altri attributi di visualizzazione

Più attributi possono essere separati da una virgola. Non è necessario specificare WITH per ogni attributo.

Ad esempio, se vuoi che la vista sia associata allo schema e crittografato, puoi farlo:

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