Como posso verificar se existe uma exibição em um banco de dados?
Eu tenho algum código SQL que precisa ser executado se uma certa exibição existir em um banco de dados. Como eu verificaria se a Visualização existe?
EDIT: O DBMS usado é o Microsoft SQL Server
sql sql-server database stored-procedures view
PARA SERVIDOR SQL
Você provavelmente quer se juntar sys.schemaaqui também.
Erro - nome de objeto inválido 'sys.views'. Eu estava consultando o mestre DB
Se você achou isso decidir entre CREATE e ALTER para uma view (como eu fiz), isso não funciona para VIEWs - você precisa DROP the VIEW * e depois CREATE. O IF EXISTS ainda funciona bem para DROPing the VIEW, então obrigado! :) * Não se esqueça de permissões quando o fizer. ;)
— FrostbiteXIII
Tente isso. se ele não existir, crie a visualização (apenas um esboço) e altere-o para inserir suas atualizações. Dessa forma, você nunca precisará descartá-lo. structuredsight.com/2014/03/12/non-failing-scripts
Presumivelmente, deve-se colocar o nome da visualização que está sendo verificada nas aspas? Caso contrário, isso nunca vai funcionar :)
— Engenheiro invertida
Já existem muitas maneiras especificadas acima, mas uma das minhas favoritas está ausente.
ONDE nViewé o nome da visualização
ATUALIZAÇÃO 25/03/2017: como @hanesjw sugeriu descartar um uso do procedimento de armazenamento em Pvez de Vcomo o segundo argumento deOBJECT_ID
— zzlalani
Eu gosto deste. Você pode usar 'u' para tabelas também.
Ou 'P' para procedimentos armazenados. SE OBJECT_ID ('dbo.sprocName', 'P') NÃO É PROCEDIMENTO DE QUEDA NULO dbo.sprocName; GO
— hanesjw 29/01
Não sei se essa foi a melhor resposta em 2009, mas parece ser em 2016 (embora o SQL Server 2016 esteja introduzindo uma opção ainda melhor).
— 19416 Eric Eric
OBJECT_ID doc msdn.microsoft.com/en-us/library/ms190328.aspx - e este fornece todos os tipos de objeto: msdn.microsoft.com/en-us/library/ms190324.aspx
Essa é a maneira mais portátil e menos invasiva:
Editar: isso funciona no SQL Server e não exige que você participe sys.schemaspara obter o esquema da exibição. Isso é menos importante se tudo estiver bem dbo, mas se você estiver fazendo bom uso de esquemas, lembre-se disso.
Cada RDBMS tem sua própria maneira de verificar metadados como esse, mas information_schemana verdade é ANSI, e acho que Oracle e aparentemente SQLite são os únicos que não o suportam de alguma maneira.
Usando SQLite: Erro de SQL: nenhuma tabela: INFORMATION_SCHEMA.VIEWS
@lutz: +1, por falta de suporte no SQLite.
— Kaal
Para o Microsoft SQL Server, acho isso o mais útil porque IF EXISTS é frequentemente usado ao criar scripts de gerenciamento de esquema. No script, você provavelmente já possui o CREATE ViEW [dbo]. [MyView] e o acima é esse snippet mais simples para copiar e colar.
Para as pessoas que verificam a existência abandonar, Viewuse este
Desde SQL Server 2016 CTP3que você pode usar novas DIE declarações em vez de grandes IFembalagens
VISTA DE QUEDA [SE EXISTE] [nome do esquema. ] view_name [..., n] [; ]
Inquerir :
se for Oracle, você usaria a tabela "all_views".
Realmente depende dos seus dbms.
— user158017
Se você deseja verificar a validade e consistência de todas as visualizações existentes, pode usar a seguinte consulta