2016-12-21 50 views
-1

我遇到了较旧的数据库创建脚本的问题。我想知道它是否与确定某些对象存在的方式有关。在SQL Server中检查表的存在的正确方法是什么?

对于表行是

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中后,我不认为它会永远都在那里。这是一个错误?如果是的话,那么写一个更好的方法是什么?

回答

2

我通常使用

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 

OBJECT_ID()功能也需要第二个(可选)参数,它是Object类型,用户定义的表,你会使用U,类似....

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

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


GO 
+0

是这样的脚本这样做有效吗? – SmashCode

+0

你的问题中的查询也可以正常工作,但是你有一个'object_id'函数的缺失圆括号,除此之外它应该可以正常工作,但是它有点冗长的查询写法,我建议的方法代码少且清晰得多: ) –

+0

M.Ali's是最常用的形式。 IF OBJECT_ID('dbo.TableName','U')IS NULL –

相关问题