Esse erro acontece quando fazemos alterações nas colunas da tabela a qual é referenciada pela exibição.
SQL Server Error Messages – Msg 4413
Ex:.
create table pessoa
(id int,
nome varchar(100),
matricula int,
matricula2 int
);
Insert into pessoa values(1,'Alexandre',1,1);
Criamos uma tabela e agora vamos criar uma view dessa tabela…
Create view vw_pessoa
as
select id, nome, matricula, matricula2
from pessoa
;
Go
select * from vw_pessoa
Até aqui ok!
Porém, se excluirmos uma dessas colunas, ao executar a view retornará o erro em questão.
alter table pessoa
drop column matricula2;
select * from vw_pessoa
Msg 207, Level 16, State 1, Procedure vw_pessoa, Line 26
Invalid column name 'matricula2'.
Msg 4413, Level 16, State 1, Line 23
Could not use view or function 'vw_pessoa' because of binding errors.
Nesse caso, para corrigir deveremos fazer um alter view e remover a coluna…
Alter view vw_pessoa
as
select id, nome, matricula
from pessoa
;
Go
Agora vamos alterar a exibição sem passar o nome das colunas.
Alter view vw_pessoa
as
select *
from pessoa
;
Go
Em seguida vamos remover uma coluna na tabela pessoa.
alter table pessoa
drop column matricula
Se executarmos novamente…
select * From vw_pessoa
Retornará o erro:
SQL Server Error Messages - Msg 4502 - View or function 'View or Function Name' has more column names specified than columns defined.
Para corrigir esses casos, executamos a procedure de sistema “sp_refreshview” que atualiza os metadados para uma view.
exec sp_refreshview 'vw_pessoa'
Pronto! nossa view está atualizada.