如何检查数据库中是否存在视图?

Dra*_*aco 122 sql database sql-server stored-procedures view

如果数据库中存在某个View,我需要执行一些SQL代码.我如何检查View是否存在?

编辑:正在使用的DBMS是Microsoft SQL Server

kem*_*002 154

FOR SQL SERVER

IF EXISTS(select * FROM sys.views where name = '')
Run Code Online (Sandbox Code Playgroud)

  • 你可能也想在这里加入`sys.schema`. (6认同)

zzl*_*ani 133

上面已经指出了很多方法,但我最喜欢的方法之一就是丢失了......

GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
    DROP VIEW nView;
GO
Run Code Online (Sandbox Code Playgroud)

WHERE nView是视图的名称

更新2017-03-25:正如@hanesjw建议删除Store Procedure使用P而不是V作为第二个参数OBJECT_ID

GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL 
    DROP PROCEDURE dbo.sprocName; 
GO
Run Code Online (Sandbox Code Playgroud)

  • 它也接受架构.`object_id(N'dbo.View',N'v)` (14认同)
  • 我喜欢这一个.您也可以将"u"用于表格. (4认同)
  • 或"P"表示存储过程.IF OBJECT_ID('dbo.sprocName','P')IS NOT NULL DROP PROCEDURE dbo.sprocName; 走 (2认同)

Eri*_*ric 52

这是最便携,最少侵入性的方式:

select
    count(*)
from
    INFORMATION_SCHEMA.VIEWS
where
    table_name = 'MyView'
    and table_schema = 'MySchema'
Run Code Online (Sandbox Code Playgroud)

编辑:这适用于SQL Server,它不需要您加入sys.schemas以获取视图的架构.如果一切都是这样dbo,那就不那么重要了,但是如果你正在好好利用模式,那么你应该牢记这一点.

每个RDBMS都有自己的方法来检查这样的元数据,但information_schema实际上是ANSI,我认为Oracle和显然SQLite是唯一不支持它的方式.

  • 使用sqlite:SQL错误:没有这样的表:INFORMATION_SCHEMA.VIEWS (3认同)

小智 17

if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
Run Code Online (Sandbox Code Playgroud)


Pரத*_*ீப் 14

对于检查存在的人来说,请View使用此功能

SQL Server 2016 CTP3您可以使用新的DIE 语句而不是大IF包装器

句法

DROP VIEW [IF EXISTS] [schema_name.] view_name [...,n] [; ]

查询:

DROP VIEW IF EXISTS view_name
Run Code Online (Sandbox Code Playgroud)

更多信息在这里


Rez*_*abi 6

您可以通过多种方式检查视图的可用性

对于 SQL 服务器

使用系统对象

IF EXISTS(
   SELECT 1
   FROM   sys.objects
   WHERE  OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
          AND Type_Desc = 'VIEW'
)
BEGIN
    PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)

使用系统对象

IF NOT EXISTS (
   SELECT 1
   FROM   sysobjects
   WHERE  NAME = '[schemaName].[ViewName]'
          AND xtype = 'V'
)
BEGIN
    PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)

使用系统视图

IF EXISTS (
   SELECT 1
   FROM sys.views
   WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
    PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)

使用INFORMATION_SCHEMA.VIEWS

IF EXISTS (
   SELECT 1
   FROM   INFORMATION_SCHEMA.VIEWS
   WHERE  table_name = 'ViewName'
          AND table_schema = 'schemaName'
)
BEGIN
    PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)

使用OBJECT_ID

IF EXISTS(
   SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
    PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)

使用sys.sql_modules

IF EXISTS (
   SELECT 1
   FROM   sys.sql_modules
   WHERE  OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
)
BEGIN
   PRINT 'View Exists'
END
Run Code Online (Sandbox Code Playgroud)