到目前为止,我一直在使用以下格式创建/更新表
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
所以我宁愿答案也为该版本。我有很多其他的检查做这种方式,所以我真的不希望彻底改变这种格局。
您可以使用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
尝试
IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
DROP TABLE [schema_name].[table_name]
GO
使用此语法。
DROP TABLE IF EXISTS [schema_name].[table_name]