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)
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
这样试试: 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)
谢谢各位热心人: 我用了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'。]
看来问题已经解决了,因为文件名的动态更改已经实现了,谢谢hellowork兄弟,马上加分
动态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
请注意,MDB的文件名是:bill+年+'-'+月 这个怎么做?
set @filename = 'bill' + convert(varchar(7),getdate(),120) 搞定,谢谢! 本贴结贴!
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)
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
做实验的,去掉不过一上来drop table bill200609,要是没有这个表就报错了
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)
我用了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'。]
动态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
这个怎么做?
搞定,谢谢!
本贴结贴!