代码:
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