Réponses:
POUR SQL SERVER
IF EXISTS(select * FROM sys.views where name = '')
Il y a déjà de nombreuses façons spécifiées ci-dessus mais l'une de mes préférées manque.
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
WHERE nView
est le nom de la vue
MISE À JOUR 25/03/2017: comme @hanesjw a suggéré de supprimer une procédure de magasin, utilisez P
plutôt V
que comme deuxième argument deOBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
C'est le moyen le plus portable et le moins intrusif:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
Edit: cela fonctionne sur SQL Server et il n'est pas nécessaire que vous vous joigniez à sys.schemas
pour obtenir le schéma de la vue. C'est moins important si tout l'est dbo
, mais si vous faites bon usage des schémas, gardez cela à l'esprit.
Chaque SGBDR a son propre petit moyen de vérifier les métadonnées comme celui-ci, mais information_schema
c'est en fait ANSI, et je pense qu'Oracle et apparemment SQLite sont les seuls à ne pas le prendre en charge d'une manière ou d'une autre.
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
Pour les personnes qui vérifient l'existence pour abandonner, View
utilisez ceci
De, SQL Server 2016 CTP3
vous pouvez utiliser de nouvelles instructions DIE au lieu de gros IF
wrappers
syntaxe
DROP VIEW [IF EXISTS] [nom_schéma. ] nom_vue [..., n] [; ]
Requete :
DROP VIEW IF EXISTS view_name
Plus d'infos ici
si c'est Oracle, vous utiliserez la table "all_views".
Cela dépend vraiment de vos dbms.
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;
Pour développer la réponse de Kevin.
private bool CustomViewExists(string viewName)
{
using (SalesPad.Data.DataConnection dc = yourconnection)
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(String.Format(@"IF EXISTS(select * FROM sys.views where name = '{0}')
Select 1
else
Select 0", viewName));
cmd.CommandType = CommandType.Text;
return Convert.ToBoolean(dc.ExecuteScalar(cmd));
}
}
Vous pouvez vérifier la disponibilité de la vue de différentes manières
POUR SQL SERVER
utiliser sys.objects
IF EXISTS(
SELECT 1
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
AND Type_Desc = 'VIEW'
)
BEGIN
PRINT 'View Exists'
END
utiliser sysobjects
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
utiliser sys.views
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
utiliser INFORMATION_SCHEMA.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
utiliser OBJECT_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
utiliser sys.sql_modules
IF EXISTS (
SELECT 1
FROM sys.sql_modules
WHERE OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
sys.schema
ici aussi.