CREATE PROCEDURE create_tables
@user_name varchar(20)
AS
declare @table_name varchar(40)
begin
set @table_name=@user_name+'_single_selected'
if not exists (select * from sysobjects where id = object_id(N'[@table_name]) and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
exec('create table '+@table_name+'(id varchar(10) primary key,题目内容 varchar(300) not null,答案 char(2) not null,级别 nchar(4),选项A varchar(200) not null,选项B varchar(200) not null,选项C varchar(200),选项D varchar(200),选项E varchar(200),选项F varchar(200),关键字 nchar(10))')
end
目的是判断表是否存在,如不存在,则创建。
表名是根据输入的变量来组合命名的,是个变量。
在if语句中判断表是否存在的时候,这样写的表名参数无效,也就是第一次执行没有问题,第二次执行就因为创建了重名表而出错。我将上面的语句用exec(的形式改写,然后连起下面的,也不行。
偶对于存储过程相当生疏,不知道该如何了

解决方案 »

  1.   

    CREATE PROCEDURE create_tables @user_name varchar(20)
    AS
    begin
      declare @table_name varchar(40)
      set @table_name=@user_name+'_single_selected'
      declare @sql as varchar(8000)
      set @sql = 'if not exists (select * from sysobjects where id = object_id(' + @table_name + ') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)'
      exec(@sql)  
      exec('create table '+@table_name+'(id varchar(10) primary key,题目内容 varchar(300) not null,答案 char(2) not null,级别 nchar(4),选项A varchar(200) not null,选项B varchar(200) not null,选项C varchar(200),选项D varchar(200),选项E varchar(200),选项F varchar(200),关键字 nchar(10))')
    end