如何检查数据库中是否已存在表?

时间:2011-03-29 14:18:06

标签: sql sql-server ssms

现在我使用的是:

IF (object_id('table', 'U') is not null)  
AND (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))  
    RETURN; 

检查我的数据库中是否已存在此“表”,但如果当前数据库中没有此类表,则在运行脚本时会收到下一条错误消息:

  

Msg 208,Level 16,State 1,Line 5
  无效的对象名称't​​able'。

这是检查数据库中是否存在表的正确方法吗?或者可能是我必须更改SQL Management Studio的任何设置?

答案:我改变了我的剧本,一切运作良好:

IF (object_id('table', 'U') is not null)  
    IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))  
        RETURN;  

6 个答案:

答案 0 :(得分:2)

IF EXISTS (SELECT * 
           FROM sys.objects 
           WHERE object_id = OBJECT_ID(N'table') 
           AND type in (N'U'))

我遇到类似的问题,发现这样做有助于查询。 N表示unicode

答案 1 :(得分:1)

if (object_id('tablex', 'U') is not null) 
begin 
select * from tablex  
end

适合我。如果该表不存在,那么应该推迟该语句的编译(假设您使用的是SQL Server 2005 +)。

如果您在if后面的语句之外的任何内容中引用该表,则需要使用begin...end

更新

您需要使用

IF (object_id('table', 'U') is not null)
    IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))
       RETURN; 

您现有的声明无法按原样编译。整个语句被编译,所有对象必须在那一点存在,即使先前已经推迟了语句的编译。

另外,SQL Server is not guaranteed to do short circuit evaluation无论如何。

答案 2 :(得分:1)

这可能对您更有效

if (object_id('table', 'U') is not null)
  if not exists (SELECT * FROM [table] WHERE id = 0)

答案 3 :(得分:0)

你可以这样做:

IF (EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_TYPE='BASE TABLE' 
    AND TABLE_NAME='QRTZ_JOB_DETAILS'))
    BEGIN
    PRINT 'EXISTS'
    END

其中TABLE_NAME是您要在数据库中检查的表的名称。

更新:

如果您使用的是SQL SERVER 2000+,则msarchet的答案更合适。

答案 4 :(得分:0)

这是众多方法之一。

   IF EXISTS (SELECT 1 
        FROM sysobjects 
        WHERE xtype='u' AND name='tablename') 
            SELECT 'tablename exists.' 
    ELSE 
            SELECT 'tablename does not exist.' 

答案 5 :(得分:0)

我认为您将表名提供给[表],如果是,请尝试将其更改为其他内容。那我觉得它会很好用。那么上述所有答案都可以正常使用。