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
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
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.
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 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.