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

Jus*_*tin 1 sql t-sql sql-server sql-server-2008

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

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

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

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

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

gbn*_*gbn 6

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

...    
IF OBJECT_ID(@TABLENAME, 'U') IS NULL
BEGIN
Run Code Online (Sandbox Code Playgroud)

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