declare @sql
set @sql = ....
exec(@sql)

解决方案 »

  1.   

    declare @sql varchar(8000)set @sql = '
    use tel
    drop table billtablename1
    select * into billtablename1
    from 
    opendatasource(''Microsoft.Jet.OLEDB.4.0'',''Data Source="D:\BAT\telDB\billtablename2.mdb";user ID=;password='')...bill
    'select left(convert(varchar,getdate(),112),6)
    set @sql = replace(@sql,'tablename1',left(convert(varchar,getdate(),112),6))
    set @sql = replace(@sql,'tablename2',left(convert(varchar,getdate(),120),7))
    exec(@sql)
      

  2.   

    declare @s varchar(8000),@ss varchar(4000)
    set @ss=replace(convert(char(7),getdate(),120),'-','')
    set @s=''use tel
    exec('drop table '+@ss)
    set @s='select * into bill'+@ss+' from opendatasource("Microsoft.Jet.OLEDB.4.0","Data Source=""D:\BAT\telDB\bill2006-09.mdb"";user ID=;password=")'
    exec(@s)
    --使用下句查看
    --exec('select *from '+@ss)
    --参考下例自做
    declare @s varchar(1000)
    set @s='select id into bill'+replace(convert(char(7),getdate(),120),'-','')+' from sysobjects'
    exec(@s)
    select * from bill200609
      

  3.   

    多了句select left(convert(varchar,getdate(),112),6)
    做实验的,去掉不过一上来drop table bill200609,要是没有这个表就报错了
      

  4.   

    这样试试:
    declare @sql varchar(8000)
    declare @tablename sysname
    ----生成动态表名称
    set @tablename = 'bill' + convert(varchar(6),getdate(),112)
    ----生成删除表的SQL字符串
    set @sql = '
    use tel
    if object_id(''' + @tablename + ''') is not null
    drop table ' + @tablename
    ----删除表
    EXEC(@sql)
    ----生成创建表的动态SQL字符串
    set @sql = '
    use tel
    select * into ' + @tablename + '
    from opendatasource(''Microsoft.Jet.OLEDB.4.0'',''Data Source="D:\BAT\telDB\' + @tablename + '.mdb";user ID=;password='')...bill'----查看生成的SQL语句
    print @sql
    ----执行创建表的SQL
    EXEC(@sql)
      

  5.   

    谢谢各位热心人:
    我用了hellowork的方法,报错如下:
    use tel
    select * into bill200609
    from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BAT\telDB\bill200609.mdb";user ID=;password=')...bill
    服务器: 消息 7399,级别 16,状态 1,行 3
    OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。 
    [OLE/DB provider returned message: 找不到文件 'D:\BAT\telDB\bill200609.mdb'。]
      

  6.   

    看来问题已经解决了,因为文件名的动态更改已经实现了,谢谢hellowork兄弟,马上加分
      

  7.   


    动态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 
      

  8.   

    请注意,MDB的文件名是:bill+年+'-'+月
    这个怎么做?
      

  9.   

    set @filename = 'bill' + convert(varchar(7),getdate(),120)
    搞定,谢谢!
    本贴结贴!