Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criar uma exibição vinculada ao esquema no SQL Server


Geralmente, é uma boa ideia vincular suas exibições em esquema no SQL Server.

A vinculação de esquema à sua visualização garantirá que as tabelas subjacentes não possam ser alteradas de uma maneira que afete a visualização. Sem vinculação de esquema, as tabelas subjacentes ou outros objetos podem ser modificados ou até mesmo excluídos. Se isso acontecer, a exibição não funcionará mais conforme o esperado.



Para criar uma visualização vinculada ao esquema, use o WITH SCHEMABINDING em seu código T-SQL para criar a exibição.

Exemplo


Aqui está um exemplo de criação de uma visualização vinculada ao esquema:
CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Observe que usei o nome de duas partes ao fazer referência à tabela em minha consulta – usei dbo.Cats em vez de apenas Cats . Fazer isso é um requisito para o esquema vincular um objeto. Se você tentar vincular um objeto ao esquema sem usar nomes de duas partes, receberá um erro.

Agora que vinculei minha visão ao esquema, se eu tentar descartar a tabela referenciada em sua definição, recebo um erro:
DROP TABLE Cats;

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

Aqui está o que acontece se eu tentar vincular o esquema à exibição sem usar nomenclatura de duas partes:
CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM Cats;
GO

Resultado:
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.

Outros atributos de visualização


Vários atributos podem ser separados por uma vírgula. Você não precisa especificar WITH para cada atributo.

Por exemplo, se você quiser que a visualização seja vinculada ao esquema e criptografado, você pode fazer isso:
CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING, ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO