导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

如何定期导入一个网上的EXCEL文件到数据库

yczealot 2007-11-28 10:32:20
已经知道网上一个EXCEL文件的地址,http://www.dfdf.com/data.xls,这个文件每天都会更新成当天的最新记录,我需要写一个过程将里面的数据导入到sql中,定期执行,应该如何做呢?
...全文
70 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chipanda2006 2007-11-29
你所说的自动下载SQL可没这功能,自己从网上找个免费的下载软件,带定时下载功能的在配合SQL的作业或是DTS功能来实现,把下载的时间先于作业执行的时间就可以了
回复
yczealot 2007-11-28
或者有什么办法能定期自动下载远程excel文件到本地指定目录也可以
回复
yczealot 2007-11-28
可是是一个网上的EXCEL文件,不是本地的,这样的方式好像不行吧
回复
dawugui 2007-11-28

--使用作业定时启停数据库的示例
IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name='启用pubs数据库')
EXEC msdb.dbo.sp_delete_job @job_name='启用pubs数据库'

--定义创建作业
DECLARE @jobid uniqueidentifier
EXEC msdb.dbo.sp_add_job
@job_name = N'启用pubs数据库',
@job_id = @jobid OUTPUT

--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=N'master', --数据库联机或者脱机只能在master数据库中进行
@sql=N'ALTER DATABASE pubs SET ONLINE' --使用pubs数据库联机(启用)
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N'启用pubs数据库处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql

--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'启用pubs数据库处理调度',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x1,
@freq_subday_interval=1,
@active_start_time = 075000 --每天07:50分执行

--添加目标服务器
DECLARE @servername sysname
SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jobid,
@server_name = @servername
回复
dawugui 2007-11-28

--导出excel处理,(至于定期的话,得用作业来搞)
declare @s nvarchar(4000)
set @s='bcp "'+
+N'select top 100 percent '
+N' case c.colid when 1 then o.name else N'''' end as 表名,'
+N' c.colid as 序号,'
+N' c.name as 字段名,'
+N' t.name 数据类型,'
+N' c.prec as 长度,'
+N' p.value as 字段说明,'
+N' m.text as 默认值'
+N' from '+quotename(@dbname)+N'.dbo.sysobjects o'
+N' inner join '+quotename(@dbname)+N'.dbo.syscolumns c on o.id=c.id'
+N' inner join '+quotename(@dbname)+N'.dbo.systypes t on c.xusertype=t.xusertype'
+N' left join '+quotename(@dbname)+N'.dbo.sysproperties p on c.id=p.id and c.colid = p.smallid'
+N' left join '+quotename(@dbname)+N'.dbo.syscomments m on c.cdefault=m.id'
+N' where o.xtype in(N''U'') and o.status>=0'
+N' order by c.id,c.colid'
+N'" queryout "'+@fname
+N'" /P"" /w'
exec master..xp_cmdshell @s,no_output
go


--查询
sqlserver中直接通过代码访问excel


SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

甚至可以:
DELETE
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


你还可以:

EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\Temp\Part.xls',
NULL,
'Excel 5.0'
GO

EXEC sp_addlinkedsrvlogin 'excelsource', 'false', NULL, NULL, NULL

在excel中选定范围,选择菜单'插入'->'名称'->'定义'

示例

SELECT *
FROM EXCEL...SalesData (整页使用 Sheet1$)

如果碰到转换为NULL值请使用文本文件来做DTS转换
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告