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

求助:谁有把XLS转到SQL的存储过程
现在的情况如下:
e:根录下有个A.xls表,表格内容是每5秒更新一次,通过xls的宏变化
xls结构:
第一行       hy           bj       bl       mj         ml
第二行     001A       100     200     200       200
第三行     002A       100     200     200       200
...
第40行     040A       100     200     200       200

其中   bj,bl,mj,ml是每5秒刷新一次,hy是手工变动的

现在想通过SQL的存储过程每5秒把这个xls导入到SQL表   B里,在导入的同时还要增加导入时间,精确到秒
SQL   B表的结构如下:
        date_time                     hy         bj       bl       mj       ml
2007-2-2   14:05:20         001A       100       200     200     200
2007-2-2   14:05:20         002A       100       200     200     200
...
2007-2-2   14:05:20         040A       100       200     200     200

也就是说每5秒要向SQL表B里增加40条记录...

请教高手,这个存储过程怎么写?
每5秒是用SQL自带的作业功能来实现吧?

------解决方案--------------------
--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insert into 表 select * from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'Excel 5.0;HDR=YES;DATABASE=c:\test.xls ',sheet1$)

--如果导入数据并生成表
select * into 表 from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'Excel 5.0;HDR=YES;DATABASE=c:\test.xls ',sheet1$)


/*===================================================================*/
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insert into OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'Excel 5.0;HDR=YES;DATABASE=c:\test.xls ',sheet1$)
select * from 表


--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls " /c -/S "服务器名 " /U "用户名 " -P "密码 " '

--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname " queryout "c:\test.xls " /c -/S "服务器名 " /U "用户名 " -P "密码 " '

/*--说明:
c:\test.xls 为导入/导出的Excel文件名.
sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用.
--*/


--下面是导出真正Excel文件的方法:

if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_exporttb] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[p_exporttb]
GO

/*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

--邹建 2003.10(引用请保留此信息)--*/

/*--调用示例

p_exporttb @tbname= '地区资料 ',@path= 'c:\ ',@fname= 'aa.xls '
--*/
create proc p_exporttb
@tbname sysname, --要导出的表名
@path nvarchar(1000), --文件存放目录
@fname nvarchar(250)= ' ' --文件名,默认为表名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varch