declare @i int
declare @sqlstr varchar(8000)
set @i = 0
while(@i < 1000)
begin
set @sqlstr = 'table_auto_'+cast(@i as varchar(8000))
CREATE TABLE [dbo].[@sqlstr] (创建的表名是@sqlstr,而不是table_auto_0、table_auto_1等等。怎样才能创建table_auto_0、table_auto_1等等的表?

解决方案 »

  1.   


    declare @i int
    declare @sqlstr varchar(8000)
    set @i = 0
    while(@i < 1000)
    begin
    set @sqlstr = 'create table dbo.table_auto_'+cast(@i as varchar(8000))+'(id int,name varchar(8))'
    exec(@sqlstr)
    end
      

  2.   


    declare @i int
    declare @sqlstr varchar(8000)
    set @i = 0
    while(@i < 1000)
    begin
    set @sqlstr = 'create table dbo.table_auto_'+cast(@i as varchar(8000))+'(id int,name varchar(8))'
    exec(@sqlstr)
    set @i=@i+1  --好像楼主的语句没有贴全
    end
      

  3.   

    declare @i int
    declare @sqlstr varchar(8000)
    set @i = 0
    while(@i < 1000)
    begin
    set @sqlstr = 'CREATE TABLE table_auto_'+cast(@i as varchar(8000))
    exec(sqlstr )end
      

  4.   

    动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  5.   

    try
    declare @i int 
    declare @sqlstr varchar(8000) 
    set @i = 0 
    while(@i < 3) 
    begin 
    set @sqlstr = 'table_auto_'+cast(@i as varchar(8000))
    set @i=@i+1
    exec('CREATE TABLE '+@sqlstr+'(id int)')END
      

  6.   

    Declare @i int
    Declare @sqlstr varchar(8000)
    set @i = 0while(@i < 10000)
    begin
    set @sqlstr = 'table_auto_'+cast(@i as varchar(8000))
    set @sqlstr = 'if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].['+@sqlstr+']'''') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)
    drop table [dbo].['+@sqlstr+']
    GOCREATE TABLE [dbo].['+@sqlstr+'] (
    [iId] [int] NOT NULL ,
    [iReportId] [int] NULL ,
    [iModule] [int] NULL ,
    [dCreateTime] [datetime] NULL ,
    [iUserId] [int] NULL ,
    [v_reportelementid_1] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
    [v_reportelementid_3] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
    [v_reportelementid_4] [ntext] COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    '
    exec(@sqlstr)
    set @i = @i+1
    end
    这段报错:服务器: 消息 105,级别 15,状态 1,行 9
    字符串 ']
    ' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 9
    第 9 行: ']
    ' 附近有语法错误。
    服务器: 消息 2714,级别 16,状态 6,行 2
    数据库中已存在名为 ''+@sqlstr+'' 的对象。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 '
    exec(@sqlstr)
    set @i = @i+1
    end
    ' 之前有未闭合的引号。
      

  7.   

    用exec(@sqlstr)执行你拼出来的语句.