代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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语句:
1
2
3
4
5
6
|
sp_configure 'show advanced options' ,1
reconfigure go sp_configure 'xp_cmdshell' ,1
reconfigure go |
Q2: SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的访问...
A2: 执行以下sql语句:
1
2
3
|
EXEC sp_configure 'Ad Hoc Distributed Queries' ,1;
RECONFIGURE; GO |
PS、此方法对上百兆的access文件速度特别慢,请慎重考虑。
*** walker ***
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1430990如需转载请自行联系原作者
RQSLT