T-SQL 检查模式中是否存在表

nic*_*oum 2 t-sql sql-server schema sql-server-2008-r2

到目前为止,我一直在使用下面的格式来创建/更新表

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U') 
DROP TABLE [dbo].[table_name]
GO
CREATE TABLE [dbo].[table_name]()
GO
Run Code Online (Sandbox Code Playgroud)

但是最近我遇到了一个案例,其中两个模式有一个同名的表。如何检查表是否存在于特定模式中?它只是SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U'需要修复的部分,我已将其余部分更改为:

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U') 
DROP TABLE [schema_name].[table_name]
GO
CREATE TABLE [schema_name].[table_name]()
GO
Run Code Online (Sandbox Code Playgroud)

我当前的服务器版本是2008R2这样的,所以我更喜欢也适用于该版本的答案。我有许多其他检查是通过这种方式完成的,所以我真的不想完全改变这种模式。

小智 10

尝试

IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
        DROP TABLE [schema_name].[table_name]
    GO
Run Code Online (Sandbox Code Playgroud)


SNR*_*SNR 5

使用此语法。

DROP TABLE IF EXISTS [schema_name].[table_name]

  • 请注意,“DROP...IF EXISTS”需要 SQL Server 2016 或更高版本。 (4认同)

use*_*983 5

schemas您也可以使用该对象。例如:

IF EXISTS (SELECT 1
           FROM sys.tables t
                JOIN sys.schemas s ON t.schema_id = s.schema_id
           WHERE s.[name] = N'schema_name'
             AND t.name = N'table_name'
             AND t.type = 'U')
    DROP TABLE [schema_name].[table_name];
GO
Run Code Online (Sandbox Code Playgroud)

  • @nickzoum 就我个人而言,我建议 S.Jose 的“OBJECT_ID”答案。它要简洁得多。 (2认同)