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

标签 sql-server tsql sql-server-2008-r2 schema

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

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

但是最近遇到了两个schema有同名表的情况。如何检查表是否存在于特定模式中?只有部分 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

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

最佳答案

尝试

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

关于sql-server - T-SQL 检查表是否存在于模式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591225/

相关文章:

sql-server - SQL Server 在两个数据库之间同步数据

sql - 在SQL Server存储过程中处理重复方案

ruby-on-rails - Ruby on Rails 与 sql server

sql-server - SQL Server : setting foreign key to a specific value

sql-server - LINQ 到 SQL : errors from stored procedure are ignored after result set is returned

sql-server - 在 T-SQL 中将percentile_cont 与 "group by"语句结合使用

sql - 行为不当的身份

sql - 处理以下查询的有效方法?在 SQLServer 或 PostgreSql 中(自连接)

sql-server - 如何获取用户的默认语言?

sql-server - SQL 服务器从两个可能的表之一中选择