156 votes

Comment puis-je vérifier si une vue existe dans une base de données?

J'ai du code SQL qui doit être exécuté si une certaine vue existe dans une base de données. Comment pourrais-je vérifier si la vue existe?

EDIT: le SGBD utilisé est Microsoft SQL Server

189voto

Kevin Points 57797

POUR SQL SERVER

 IF EXISTS(select * FROM sys.views where name = '')
 

163voto

zzlalani Points 7065

Bien qu'il y ait déjà beaucoup de façons spécifiées ci-dessus mais il manque l'une de mes préférées

 GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
    DROP VIEW nView;
GO
 

WHERE nView est le nom de la vue

60voto

Eric Points 35647

C'est le plus portable, moins attentatoires:

select
    count(*)
from
    INFORMATION_SCHEMA.VIEWS
where
    table_name = 'MyView'
    and table_schema = 'MySchema'

Edit: Cela fonctionne sur SQL Server, et il n'exige pas de vous joindre à l' sys.schemas pour obtenir le schéma de la vue. C'est moins important si tout est dbo, mais si vous êtes à la bonne utilisation des schémas, alors vous devez garder cela à l'esprit.

Chaque SGBD a sa propre façon de vérifier les métadonnées, mais information_schema est en fait la norme ANSI, et je pense que Oracle et apparemment SQLite sont les seuls qui ne le supportent pas, d'une certaine manière.

18voto

Kaal Points 39
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )

1voto

Si vous souhaitez vérifier la validité et la cohérence de toutes les vues existantes, vous pouvez utiliser la requête suivante

 declare @viewName sysname
declare @cmd sysname
DECLARE check_cursor CURSOR FOR 
SELECT cast('['+SCHEMA_NAME(schema_id)+'].['+name+']' as sysname) AS viewname
FROM sys.views

OPEN check_cursor
FETCH NEXT FROM check_cursor 
INTO @viewName

WHILE @@FETCH_STATUS = 0
BEGIN

set @cmd='select * from '+@viewName
begin try
exec (@cmd)
end try
begin catch
print 'Error: The view '+@viewName+' is corrupted .'
end catch
FETCH NEXT FROM check_cursor 
INTO @viewName
END 
CLOSE check_cursor;
DEALLOCATE check_cursor;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X