码迷,mamicode.com
首页 > 数据库 > 详细

将ACCESS数据批量导入SQL SERVER

时间:2014-06-26 12:12:38      阅读:399      评论:0      收藏:0      [点我收藏+]

标签:数据导入   access   sql server   

代码:

IF OBJECT_ID(‘Sp_InputAccesstoSQL‘) IS NOT NULL
    DROP PROC Sp_InputAccesstoSQL
GO
CREATE PROC Sp_InputAccesstoSQL
@dir NVARCHAR(100),--ACCESS文件存放路径:如D:\Files
@tabname NVARCHAR(50) --定义导入到数据库中的表名,如果存在就不需要创建
AS
SET NOCOUNT ON
DECLARE @cmd NVARCHAR(1000)
CREATE TABLE #t([filename] NVARCHAR(1000))
IF RIGHT(@dir,1)<>‘\‘ 
    SET @dir=@dir+‘\‘
SET @cmd = N‘dir "‘ + @dir + ‘*.mdb" /B‘
INSERT #t EXEC master..xp_cmdshell @cmd
DELETE #t WHERE [filename] IS NULL
--在SQL中创建表:
DECLARE @S nvarchar(MAX)
IF OBJECT_ID(@tabname) IS NULL
BEGIN
    SELECT TOP 1 @S=‘SELECT TOP 0 * INTO ‘+ @tabname+‘ FROM OPENROWSET(
            ‘‘Microsoft.ACE.OLEDB.12.0‘‘, ‘‘‘+@DIR+[filename]+‘‘‘;‘‘Admin‘‘;‘‘‘‘,‘+@tabname+‘)‘
    FROM #t  
    EXEC(@S)
END
--开始导入目录下的文件
SET @S = ‘‘
SELECT @S = @S + ‘INSERT ‘+@tabname+‘ SELECT * FROM OPENROWSET(
    ‘‘Microsoft.ACE.OLEDB.12.0‘‘, ‘‘‘+@DIR+[filename]+‘‘‘;‘‘Admin‘‘;‘‘‘‘,‘+@tabname+‘)‘  
FROM #t      
EXEC(@S)
SET NOCOUNT OFF
GO
--调用:

EXEC Sp_InputAccesstoSQL ‘F:\test‘,‘table_name‘


注意:根据系统安装access版本的不同,Microsoft.ACE.OLEDB.12.0可能替换为这个Microsoft.Jet.OLEDB.4.0


FAQ:

Q1: SQL Server 阻止了对组件 ‘xp_cmdshell‘ 的 过程 ‘sys.xp_cmdshell‘ 的访问...

A1: 执行以下sql语句:

sp_configure ‘show advanced options‘,1
reconfigure
go
sp_configure ‘xp_cmdshell‘,1
reconfigure
go

Q2: SQL Server 阻止了对组件 ‘Ad Hoc Distributed Queries‘ 的访问...

A2: 执行以下sql语句:

EXEC sp_configure‘Ad Hoc Distributed Queries‘,1;
RECONFIGURE;
GO


参考:


*** walker ***


本文出自 “walker的流水账” 博客,请务必保留此出处http://walkerqt.blog.51cto.com/1310630/1430990

将ACCESS数据批量导入SQL SERVER,布布扣,bubuko.com

将ACCESS数据批量导入SQL SERVER

标签:数据导入   access   sql server   

原文地址:http://walkerqt.blog.51cto.com/1310630/1430990

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!