检查SQL Server中是否存在表的正确方法是什么?

检查SQL Server中是否存在表的正确方法是什么?,sql,sql-server,database,Sql,Sql Server,Database,我在使用旧的数据库创建脚本时遇到问题。我想知道它是否与它决定某些物体存在的方式有关 对于表格,行是 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tablename]' AND type in (N'U')) BEGIN Create table... END 这似乎是错误的,在查看sys.objects之后,我认为它永远不会出现在那里。这是虫子吗?如果是这样的话,写这篇文章的更好方法

我在使用旧的数据库创建脚本时遇到问题。我想知道它是否与它决定某些物体存在的方式有关

对于表格,行是

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tablename]' AND type in (N'U'))
BEGIN
Create table...
END
这似乎是错误的,在查看sys.objects之后,我认为它永远不会出现在那里。这是虫子吗?如果是这样的话,写这篇文章的更好方法是什么

IF OBJECT_ID('dbo.TableName') IS NULL 

  CREATE Table dbo.TableName 
  ....... 


GO
或者你可以做一些像

IF OBJECT_ID('dbo.TableName') IS NOT NULL 
  DROP TABLE dbo.TableName 
GO

  CREATE Table dbo.TableName 
  .......     
GO
IF OBJECT_ID('dbo.TableName' , 'U') IS NULL 

  CREATE Table dbo.TableName 
  ....... 


GO
OBJECT\U ID()
函数还接受第二个(可选)参数,它是对象类型,对于用户定义的表,您将使用
U
,类似于

IF OBJECT_ID('dbo.TableName') IS NOT NULL 
  DROP TABLE dbo.TableName 
GO

  CREATE Table dbo.TableName 
  .......     
GO
IF OBJECT_ID('dbo.TableName' , 'U') IS NULL 

  CREATE Table dbo.TableName 
  ....... 


GO

这个脚本执行的方式有效吗?您问题中的查询也可以,但是您缺少了
object\u id
函数的括号,除此之外,它应该可以正常工作,但编写查询有点长,我建议的方法代码更少,更干净:)M.Ali是最常用的形式。如果对象_ID('dbo.TableName','U')为空