Pergunta

Por que eu tenho que escrever 'vista de atualização scripts' , e executá-los cada vez que adicionar ou editar alguns campos para uma visão?

SQL Server entende que ele precisa atualizar a exibição quando a editá-lo na fantasia vista-janelas de edição no Management Studio, então por que não pode simplesmente dizer a sua visão para ir refrescar-se após a edição da vista através de um script?

Foi útil?

Solução

Visualizações precisam ser atualizados se as tabelas subjacentes mudar em tudo. Isso pode alterar os tipos de dados de colunas da visão ou reorganizar seus índices. Portanto, ele precisa saber. Caso contrário, você executar uma consulta contra ele, e ele ia explodir muito rapidamente.

Você não deve ter para executar sp_refreshview para alterar a vista. Apenas para alterar suas tabelas subjacentes.

Além disso, por favor, não provocação bola feliz divertido.

Edit: Só corri este código (em sucessão) para tentar reproduzir o seu problema. I foi, infelizmente, incapaz de, como ele funcionou como esperado (SQL Server 2008):

create view MyView
as
select ProductKey, ProductID, ProductName, Price
from dbo.Products

select v.* from MyView v

alter view MyView
as
select ProductKey, ProductID, ProductName, Price*100 as MyPrice
from dbo. Products

select v.* from MyView v

Outras dicas

Use COM SCHEMABINDING na definição vista a eliminar a necessidade para quaisquer atualizações

E em combinação com ALTER VIEW, não o designer

Editar, Jul 2012, a partir de link acima. Meu negrito

SCHEMABINDING

Vinculado a vista para o esquema da tabela ou tabelas subjacentes. Quando SCHEMABINDING for especificado, a tabela base ou tabelas não pode ser modificado de uma forma que afetaria a definição de exibição . A definição vista em si deve primeiro ser modificado ou caiu para remover dependências na tabela que está a ser modificado. Quando você usa SCHEMABINDING, o select_statement deve incluir os nomes de duas partes (schema.object) de tabelas, exibições ou funções definidas pelo usuário que são referenciados. Todos os objetos referenciados devem estar no mesmo banco de dados.

Views ou tabelas que participam de uma exibição criada com a cláusula SCHEMABINDING não pode ser baixado , a menos que a visão cair ou alterado para que ele não tem mais ligação esquema. Caso contrário, o Database Engine gerará um erro. Além disso, a execução de ALTER TABLE em tabelas que participam de vista que têm ligação esquema falhar quando estas declarações afetar a definição da visão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top