declare @a intdeclare @sql varchar(1000)select @a=max(cast(replace(name,'tab','') as int)) from sysobjects where name like 'tab_%' and isnumeric(replace(name,'tab',''))=1set @a=@a+1set @sql='create table tab'+rtrim(@a)+'(列 数据类型)'exec(@sql)

解决方案 »

  1.   

    j9988的方法是可以的,我也曾这么考虑过。
    换个思路呢
    declare @a int
    set @a=0
    while not OBJECT_ID('tab'+cast(@a as char) IS NULL
      set @a=@a+1
    ......
    上面的写法错误很多的,只是用来说一下思路:从@a最小的表查起,即先看tab0是否存在,如果存在@a=@a+1,再看tab1是否存在......最后返回@a+1 。问题是怎样生成tab0、tab1,最后再怎样返回结果@a?程序其他地方不能够从系统表中查表。
      

  2.   

    try:declare @a int
    set @a=0
    while OBJECT_ID('tab'+cast(@a as varchar(10))) IS not NULL
      set @a=@a+1exec('create table tab'+cast(@a as varchar(10))+' (a int)')
      

  3.   

    try:declare @a int
    set @a=0
    while OBJECT_ID('tab'+cast(@a as varchar(10))) IS not NULL
      set @a=@a+1declare @sql varchar(8000)
    set @sql='create table tab'+cast(@a as varchar(10))+' (a int)'
    exec(@sql)