可以 
declare @tablename varchar(30),@Str varchar(8000)
set @tablename='abc'
set @str='create table '+@tablename+'(col int)'
exec(@str)

解决方案 »

  1.   

    一般来说变量是不能做表明的但是可以定义一个变量@str再把sql语句传入@str的变量中去。
    再执行exec(@str)就可以了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 ] )
      

  2.   

    CREATE PROC abc
    @tablename varchar(10)
    as
    begin
        declare @str varchar(80000)
        @str='select * into bbb from '+@tablename
        exec (@str)
    EndGO
      

  3.   

    报两个错
    Incorrect syntax near '@str'must declare the variable '@str'
      

  4.   

    CREATE PROC abc
    @tablename varchar(10)
    as
    begin
        declare @str varchar(8000)
        set @str='select * into bbb from '+@tablename
        exec (@str)
    EndGO
      

  5.   

    --动态生成临时表
    declare @createtemptable varchar(8000),@i int,@sql varchar(8000)
    declare @Columns varchar(50),@Key varchar(200),@ColumnsType varchar(50)
    declare @ColumnsTemp as varchar(4000)
    set @sql='a=float,b=float,c=float,d=float,e=float,f=float' 
    set @Columns='' set @ColumnsType='' set @ColumnsTemp=''
    set @createtemptable ='' set @Key=''
    set @i=charindex(',',@sql)
    while  @i>0
    begin
    set @Key=left(@sql,@i-1)
    set @Columns=left(@Key,patindex('%[=]%',@Key)-1)
    set @ColumnsType=right(@Key,len(@Key)-patindex('%[=]%',@Key) )
    set @ColumnsTemp=@ColumnsTemp+char(10)+@Columns+' '+@ColumnsType+','
    set @sql=right(@sql,len(@sql)-@i)
    set @i=charindex(',',@sql)
    set @Key=''
    set @Columns=''
    set @ColumnsType=''
    end
    if len(@sql)>0
    begin
    set @Key=@sql
    set @Columns=left(@Key,patindex('%[=]%',@Key)-1)
    set @ColumnsType=right(@Key,len(@Key)-patindex('%[=]%',@Key) )
    set @ColumnsTemp=@ColumnsTemp+char(10)+@Columns+' '+@ColumnsType
    end
    set @createtemptable=@createtemptable+'CREATE  table  #Rec ('+@ColumnsTemp+')'
    exec(@createtemptable+'insert #Rec values (1,2,3,4,5,6) 
    select * from #Rec ')--结果
     a    b   c        d        e         f
    1.0  2.0 3.0 4.0 5.0 6.0