如果表存在SQL Server中的动态查询

时间:2014-08-07 09:54:04

标签: sql sql-server sql-server-2008 tsql

我对建议用于检查表是否存在的代码感到有点困惑。 有人可以解释我写的代码是否可用于检查表是否存在?

如果表存在,我希望它什么都不做。

这是我的代码:

BEGIN 
SET NOCOUNT ON;

DECLARE @SQL NVARCHAR(MAX);

IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))

    BEGIN
        SET @SQL = 

        N'CREATE TABLE ' + @TABLENAME + '
        ('
        + '[ID] [int] IDENTITY(1,1) NOT NULL,
        [intID] [int] NULL,
        [varID] [varchar](50) NULL,
        [FormName] [varchar](250) NULL,
        [UID] [varchar](3) NOT NULL,
        CONSTRAINT [PK_Selections' + @TABLENAME + '_1] PRIMARY KEY CLUSTERED(
        [ID]));';

        EXEC sp_executesql @sql;
    END


END

我忘了提到目前程序 DOES 创建表格。但是,当我再次运行该过程时,它会再次尝试创建表,然后失败。

如果表存在,如何退出程序?

3 个答案:

答案 0 :(得分:6)

只需做这个简单的检查。无需查询sys.objects

...    
IF OBJECT_ID(@TABLENAME, 'U') IS NULL
BEGIN

您的检查失败,因为您实际上正在寻找名为“+ @TABLENAME +

的表格

答案 1 :(得分:1)

以下是检查表是否存在:

IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))

table sys.objects包含数据库中所有对象的描述。

Function OBJECT_ID() - 按名称返回对象的id。

输入(N' U')) - 检查该对象是否由用户创建。

要检查该表是否为EXISTS,请使用检查:

IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))
BEGIN
...
END

答案 2 :(得分:1)

试试这个:

IF NOT EXISTS(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE
 TABLE_NAME=LTRIM(RTRIM(@TABLENAME )) AND TABLE_TYPE='BASE TABLE'

BEGIN
  -- CREATE YOUR TABLE
END