जवाबों:
SQL सर्वर के लिए
IF EXISTS(select * FROM sys.views where name = '')
ऊपर पहले से ही कई तरीके निर्दिष्ट हैं लेकिन मेरी पसंदीदा में से एक गायब है ..
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
जहां nView
देखने का नाम है
UPDATE 2017-03-25: जैसा कि @hanesjw ने दूसरे तर्क के P
बजाय एक स्टोर प्रक्रिया प्रक्रिया को छोड़ने का सुझाव दियाV
OBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
यह सबसे पोर्टेबल, कम से कम घुसपैठ तरीका है:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
संपादित करें: यह SQL सर्वर पर काम करता है, और इसे sys.schemas
देखने के स्कीमा प्राप्त करने के लिए आपको शामिल होने की आवश्यकता नहीं है । यह सब कुछ कम महत्वपूर्ण है dbo
, लेकिन यदि आप स्कीमा का अच्छा उपयोग कर रहे हैं, तो आपको इसे ध्यान में रखना चाहिए।
प्रत्येक RDBMS का मेटाडेटा की जाँच करने का अपना छोटा तरीका है, लेकिन information_schema
यह वास्तव में ANSI है, और मुझे लगता है कि Oracle और जाहिरा तौर पर SQLite ही ऐसे हैं जो कुछ फैशन में इसका समर्थन नहीं करते हैं।
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
यदि यह ओरेकल है तो आप "all_views" तालिका का उपयोग करेंगे।
यह वास्तव में आपके dbms पर निर्भर करता है।
यदि आप सभी मौजूदा विचारों की वैधता और स्थिरता की जांच करना चाहते हैं, तो आप निम्नलिखित प्रश्न का उपयोग कर सकते हैं
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;
केविन के जवाब पर विस्तार करने के लिए।
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));
}
}
आप विभिन्न तरीकों से दृश्य की उपलब्धता की जांच कर सकते हैं
SQL सर्वर के लिए
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
sysobjects का उपयोग करें
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
sys.views का उपयोग करें
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
INFORMATION_SCHEMA.VIEWS का उपयोग करें
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
OBJECT_ID का उपयोग करें
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
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
यहां भी शामिल होना चाहते हैं ।