T-SQL 检查模式中是否存在 table
T-SQL Check if table exists in schema
到目前为止,我一直在为 creating/updating tables
使用以下格式
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
但最近我遇到了两个模式具有相同名称的 table 的情况。如何检查 table 是否存在于特定模式中?只有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
,所以我希望答案也适用于该版本。我还有很多其他检查是通过这种方式完成的,所以我真的不想完全改变这种模式。
使用这个语法。
DROP TABLE IF EXISTS [schema_name].[table_name]
尝试
IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
DROP TABLE [schema_name].[table_name]
GO
您也可以使用 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
到目前为止,我一直在为 creating/updating tables
使用以下格式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
但最近我遇到了两个模式具有相同名称的 table 的情况。如何检查 table 是否存在于特定模式中?只有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
,所以我希望答案也适用于该版本。我还有很多其他检查是通过这种方式完成的,所以我真的不想完全改变这种模式。
使用这个语法。
DROP TABLE IF EXISTS [schema_name].[table_name]
尝试
IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
DROP TABLE [schema_name].[table_name]
GO
您也可以使用 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