Câu trả lời:
CHO SQL SERVER
IF EXISTS(select * FROM sys.views where name = '')
Đã có nhiều cách được chỉ định ở trên nhưng thiếu một trong những cách yêu thích của tôi ..
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
WHERE nView
là tên của quan điểm
CẬP NHẬT 2017 / 03-25: như @hanesjw đã đề xuất bỏ sử dụng Quy trình lưu trữ P
thay vì V
làm đối số thứ hai củaOBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
Đây là cách di động nhất, ít xâm nhập nhất:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
Chỉnh sửa: Điều này không hoạt động trên SQL Server và nó không yêu cầu bạn tham gia sys.schemas
để có được lược đồ của chế độ xem. Điều này ít quan trọng hơn nếu mọi thứ đều như vậy dbo
, nhưng nếu bạn đang sử dụng tốt các lược đồ, thì bạn nên ghi nhớ điều đó.
Mỗi RDBMS có cách kiểm tra siêu dữ liệu nhỏ như thế này, nhưng information_schema
thực ra là ANSI và tôi nghĩ rằng Oracle và rõ ràng SQLite là những người duy nhất không hỗ trợ nó theo cách nào đó.
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
nếu là Oracle, bạn sẽ sử dụng bảng "all_view".
Nó thực sự phụ thuộc vào dbms của bạn.
Nếu bạn muốn kiểm tra tính hợp lệ và tính nhất quán của tất cả các chế độ xem hiện tại, bạn có thể sử dụng truy vấn sau
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;
Để mở rộng câu trả lời của 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));
}
}
Bạn có thể kiểm tra tính khả dụng của chế độ xem theo nhiều cách khác nhau
CHO SQL SERVER
sử dụng 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
sử dụng sysobjects
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
sử dụng sys.view
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
sử dụng THÔNG TIN_SCHema.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
sử dụng OBarget_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
sử dụng 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
đây, là tốt.