代码:

IF OBJECT_ID('Sp_InputAccesstoSQL') IS NOT NULL    DROP PROC Sp_InputAccesstoSQLGOCREATE PROC Sp_InputAccesstoSQL@dir NVARCHAR(100),--ACCESS文件存放路径:如D:\Files@tabname NVARCHAR(50) --定义导入到数据库中的表名,如果存在就不需要创建ASSET NOCOUNT ONDECLARE @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 @cmdDELETE #t WHERE [filename] IS NULL--在SQL中创建表:DECLARE @S nvarchar(MAX)IF OBJECT_ID(@tabname) IS NULLBEGIN    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 OFFGO--调用: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',1reconfiguregosp_configure 'xp_cmdshell',1reconfigurego

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

A2: 执行以下sql语句:

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

参考:、、

PS、此方法对上百兆的access文件速度特别慢,请慎重考虑。

*** walker ***