你的逻辑正好反了
应该是,当不存在该表时才创建该表,if语句应该这么写IF NOT (EXISTS(select * from dbo.sysobjects where id = object_id(N'[dbo].['+@TableName+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1))

解决方案 »

  1.   

    另外因为语句里面有变量,不能象你这么写,可以用execCREATE PROCEDURE sp_CreateTable
    @TableName varchar(20)--新建表名称
    ASexec('IF NOT (EXISTS(select * from dbo.sysobjects where id = object_id(N'''+@TableName+''') and OBJECTPROPERTY(id, N''IsUserTable'') = 1))
    begin
    CREATE TABLE ['+@TableName+'] (
    [id] [int] NOT NULL ,
    [name] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    END')
      

  2.   

    EXECUTE
    执行标量值的用户定义函数、系统过程、用户定义存储过程或扩展存储过程。同时支持 Transact-SQL 批处理内的字符串的执行 若要唤醒调用函数,请使用 EXECUTE stored_procedure 中描述的语法。语法
    执行存储过程:[ [ EXEC [ UTE ] ]
        { 
            [ @return_status = ]
                { procedure_name [ ;number ] | @procedure_name_var
        } 
        [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]
            [ ,...n ] 
    [ WITH RECOMPILE ] 执行字符串:EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )