Jawaban:
UNTUK SQL SERVER
IF EXISTS(select * FROM sys.views where name = '')
Sudah ada banyak cara yang ditentukan di atas tetapi salah satu favorit saya hilang ..
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
WHERE nViewadalah nama tampilan
UPDATE 2017-03-25: seperti yang disarankan oleh @hanesjw untuk membatalkan penggunaan Prosedur Toko Palih-alih Vsebagai argumen keduaOBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
Ini adalah cara yang paling portabel, paling tidak mengganggu:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
Sunting: Ini berfungsi pada SQL Server, dan Anda tidak perlu bergabung sys.schemasuntuk mendapatkan skema tampilan. Ini kurang penting jika semuanya dbo, tetapi jika Anda memanfaatkan skema dengan baik, maka Anda harus mengingatnya.
Setiap RDBMS memiliki sedikit cara sendiri untuk memeriksa metadata seperti ini, tetapi information_schemasebenarnya ANSI, dan saya pikir Oracle dan tampaknya SQLite adalah satu-satunya yang tidak mendukungnya dalam beberapa cara.
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
Untuk orang-orang yang memeriksa keberadaannya, Viewgunakan ini
Dari SQL Server 2016 CTP3Anda dapat menggunakan pernyataan DIE baru, bukan IFpembungkus besar
sintaksis
LIHAT DROP [JIKA ADA] [schema_name. ] view_name [..., n] [; ]
Pertanyaan:
DROP VIEW IF EXISTS view_name
Info lebih lanjut di sini
jika itu Oracle, Anda akan menggunakan tabel "all_views".
Itu benar-benar tergantung pada dbms Anda.
Jika Anda ingin memeriksa validitas dan konsistensi semua tampilan yang ada, Anda dapat menggunakan kueri berikut
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;
Untuk memperluas jawaban 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));
}
}
Anda dapat memeriksa ketersediaan tampilan dengan berbagai cara
UNTUK SQL SERVER
gunakan 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
gunakan sysobjects
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
gunakan sys.views
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
gunakan INFORMATION_SCHEMA.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
gunakan OBJECT_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
gunakan sys.sql_modules
IF EXISTS (
SELECT 1
FROM sys.sql_modules
WHERE OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
sys.schemasini juga.