代码之家  ›  专栏  ›  技术社区  ›  Keng

如果表存在于SQL Server 2000中,如何删除它?

  •  20
  • Keng  · 技术社区  · 16 年前

    我有一个dts包,它删除一个表,然后创建并填充它,但有时会发生一些事情,在删除表之后包会失败。如果重新运行,则会失败,因为尚未创建表。

    在MySQL中,是否有类似于“if exists”的sqlserver 2000?

    谢谢。

    7 回复  |  直到 12 年前
        1
  •  33
  •   ryan Sparce    14 年前

    或更快:

    IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL  
      DROP TABLE temp_ARCHIVE_RECORD_COUNTS  
    
        2
  •  10
  •   Brian R. Bondy    15 年前
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
    DROP TABLE TableName;
    GO
    

    你可以检查 list of type definitions in the sys.objects table here 如果要检查数据库中是否存在其他对象。

        3
  •  8
  •   Blorgbeard    13 年前

    还没有人提到过这种方法:

    if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='MyTable') 
    begin 
        drop table MyTable
    end
    

    这是最可移植的方法-它至少在MSSQL2000到MSSQL2008上工作。

    信息模式表是SQL-92标准的一部分。

        4
  •  3
  •   Mike Daniels    16 年前

    当您除去和对象,然后再添加回数据库时,需要记住的一件事是向表中添加任何权限。这已经让我们绊倒了好几次。

    我投了特蕾西农的票。我想说的是,不要直接查询sysobjects表,因为Microsoft更新可能会破坏这种代码。您可以使用object_id函数将自己与之隔离开来。

        5
  •  3
  •   Snake Eyes    12 年前

    当然:

    IF OBJECT_ID('YOURTABLENAME') IS NOT NULL

    哪里 YOURTABLENAME 无论您的表名是什么。

    如果是临时表,只需添加 tempdb.# 之前 OBJECT_ID 函数调用。

        6
  •  1
  •   Michał Piaskowski    16 年前

    你需要检查一下 sysobjects 桌子

        7
  •  1
  •   Mitchel Sellers    16 年前

    以下工作正常,只需将tablename替换为您的表

    IF EXISTS( SELECT * FROM dbo.sysobjects where id = object_id(N'TABLENAME') AND OBJECTPROPERTY(id, N'IsTable') = 1)
    BEGIN
        DROP TABLE TABLENAME
    END