Eu tenho o SQL Server 2000. Desejo limpá-lo descartando objetos obsoletos e não utilizados. Uma das visualizações me causa um erro. Tento dar mais informações, mas ainda não tenho ideia da causa.
Antecedentes: descobri que uma visualização pode ser descartada e sei com certeza que ninguém a usa. E vincula-se ao banco de dados desanexado (não utilizado). Eu decidi largá-lo. Antes de cair, verifico a vista para ter certeza.
CREATE View vw_obsolete_view
AS
SELECT [very long],
,
,
...
FROM [unused_database].dbo.vw_obsolete_view
DROP VIEW vw_obsolete_view
Agora, o View foi descartado. Parece estar tudo bem. No entanto, recebi uma ligação do usuário informando que o aplicativo (ADP) recebeu uma mensagem de erro. Ele informa que a exibição vw_obsolete_view está ausente.
Como essa visão não é minha codificação e meu aplicativo chama apenas meus objetos. Portanto, não tenho ideia de por que isso causa um erro. Levei uma hora para descobrir. Eu verifico todos os objetos dependentes. Nada está vinculado a esta visualização. Eu verifiquei todo o código ADP VBA. Nada se relaciona com essa visão também.
Não consigo encontrar o que há de errado nisso. Mas sei que o problema é de dropar view pois fui o único que alterou o banco de dados. Então eu faço uma nova visão com o mesmo nome.
CREATE View vw_obsolete_view
AS
SELECT 1 AS total
O erro no usuário final desaparece. O usuário final está feliz, mas ainda não consigo cancelar a visualização. Eu ainda não tenho idéia.
Observação: não posso atualizar o SQL Server agora.
Execute o SQL Profiler para identificar quem, onde etc. Você tem várias colunas com hostname, ntusername, etc., que permitirão que você veja o uso.
Por exemplo: é só um cliente ou usuário que percebe? Eles estão executando um ADP diferente?
A chamada de exibição também pode ser incorporada em algumas propriedades de formulário como RecordSource para esse formulário ou como fonte para algum controle. Pode não ser em VBA. Você teria que escrever algum VBA para iterar através dos formulários, controles e relatórios testando diversas propriedades.
Além de executar um trace do SQL Server Profiler usando o modelo Standard (padrão) + um filtro na coluna TextData, você também pode tentar verificar se a view é uma dependência de algum outro objeto de dentro do banco de dados:
Mesmo que seja usado de dentro do banco de dados, pode ser usado de alguma frase SQL dinâmica que não aparece nas pesquisas acima, portanto, a melhor aposta ainda é no SQL Server Profiler.