Criei uma exibição que seleciona várias tabelas em uma consulta complexa.
- Devido à complexidade, criei gatilhos de inserção/atualização/exclusão INSTEAD OF para lidar com essas operações na exibição.
- Também criei procedimentos armazenados que atualizam a exibição.
Quando eu construo o projeto de banco de dados VS2010, o script SQL contém os comandos CREATE nesta ordem: (1) a exibição, (2) os procedimentos armazenados e, em seguida, (3) os gatilhos.
Agora, quando executo o script de implantação, recebo um erro:
*** SQL01268 D:\scripts\vs2010\Database.sql (28494,0).Net SqlClient Data Provider:
Msg 4405, Level 16, State 1, Procedure MyViewSave, Line 18 View or function 'MyView' is
not updatable because the modification affects multiple base tables
Se os gatilhos fossem criados antes do procedimento armazenado, não haveria problema.
Como posso garantir que os gatilhos sejam criados antes dos procedimentos armazenados?
Obrigado!
Você pode ter encontrado um problema conhecido com o Visual Studio 2010:
Dito isso, a Microsoft recomenda que você ajude o Visual Studio a detectar as dependências de objeto que ele parece estar ignorando em seu script de implantação:
Portanto, se tudo o que você está desenvolvendo estiver no
dbo
esquema, certifique-se de preceder os nomes proc e view, causando problemas com o nome do esquema. Por exemplo:dbo.MyView
em vez de apenasMyView
. O Visual Studio tem um recurso "Fully Qualify Name" no menu Refatorar quando você clica com o botão direito do mouse em um objeto que o ajudará a fazer isso rapidamente.Se isso não ajudar, dê uma olhada no Google e dê uma olhada em algumas das soluções alternativas sugeridas nas páginas vinculadas acima. Deixe-nos saber o que acabou funcionando para você.