如果表中存在架构T-SQL检查

问题描述 投票:2回答:3

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

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

但最近我碰到其中两个模式具有相同名称的表的情况。我如何检查表中特定模式存在?它唯一需要固定partSELECT 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

我现在的服务器版本2008R2所以我宁愿答案也为该版本。我有很多其他的检查做这种方式,所以我真的不希望彻底改变这种格局。

sql-server tsql sql-server-2008-r2 schema
3个回答
2
投票

您可以使用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

3
投票

尝试

IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
        DROP TABLE [schema_name].[table_name]
    GO

1
投票

使用此语法。

DROP TABLE IF EXISTS [schema_name].[table_name]

© www.soinside.com 2019 - 2024. All rights reserved.