日期:2014-05-18  浏览次数:20375 次

50分 求一个sqlserver 的DTS 的问题。
我要用dts实现这样一个功能:
1.将excel文件导入到ms   sqlserver2000。
2.这个excel文件的名称是可变的,但按固定名称+月份变化的,excel文件里有多个sheet.
3.DTS是自动在每月3号固定的时间执行。DTS执行前要查找是否有包含当月名称命名的文件,如果没有要发送email给管理员。

请路过的sqlserver高手们看看,给点思路,给个例子更好了:)

------解决方案--------------------
1.将excel文件导入到ms sqlserver2000。
如果数据量不大:可以用OPENDATASOURCE
insert into 表格 SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\Finance\account.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions
如果数据量大可以考虑用BCP
2.用SELECT month(getdate()) as a可以得到月份,可以动态的的生成文件名
3.可以用作业执行
总之:写一段存储过程放在作业中执行

------解决方案--------------------
创建到电子表格的链接.sql
Use master
go
exec sp_addlinkedserver
@server= 'MyServer ',
@srvproduct= 'Excel ',
@provider= 'Microsoft.Jet.OLEDB.4.0 ',
@datasrc= 'D:\USER.xls ',
@provstr= 'excel 5.0 '
然后再在控制台的安全性里面创建链接服务器就行了!

运行本示例前,需要将“USER1.xls”文件拷贝到D盘根目录下。
访问Excel电子表格中的数据.sql
SELECT 用户编号,用户名称,用户密码 --选择Excel表中的数据列
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ', --要访问的数据源
/*指定电子表格路径、登录名称、密码*/
'Data Source= "D:\USER1.xls ";
User ID=ADMIN;
Password=;
Extended properties=Excel 5.0 ')...[sheet1$]
--选择USER1电子表格中sheet1工作表
哥们别忘给分啊!我没什么分,下载东西都不能下载,如果学得能帮你,就请给分与我!
------解决方案--------------------
用dts实现没必要,写几句简单的Sql语句交给SqlAgent去做,出错了通知管理员就好

建作业最好用企业管理器,因为大家都说那个看起来很直观,不怕写错

定一个步骤,在步骤中写上

declare @month varchar(2)
set @month = Month(getDate()) --当前月

--这是一个sheet,有多个就写多个
exec ( 'insert into [表1] SELECT * FROM OpenDataSource
( ' 'Microsoft.Jet.OLEDB.4.0 ' ',
' 'Data Source= "c:\固定名称 ' ' + @month + ' '.xls ";User ID=Admin;Password=;Extended properties=Excel 8.0 ' ')...[sheet1$] ')


定义执行的时间为每月3号,企业管理器中点点鼠标就好


执行前要查找是否有包含当月名称命名的文件,如果肯定是要报错了,
所以定义执行失败后要发送email给管理员,这个打个勾就可以,不过要保证你的SqlServer定义了邮件接收者



------解决方案--------------------
在域中用OpenDataSource会有权限的问题,windows的域权限控制做的也算是相当到家了。