方法很多,主要用到两种1. SQL2000用企业管理器中的DTS, SQL2005中用 Integration Services (SSIS) 2. 使用命令 Opendatasource或OPENROWSET等 --导Access SELECT a.* into 新表名 FROM opendatasource('Microsoft.Jet.OLEDB.4.0', 'Data Source="d:\dd.mdb";Jet OLEDB:Database Password=test')...tb AS a
--有用户密码+数据库密码可以这样写 SELECT a.* into 新表名 FROM opendatasource('Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\SDV50.mdb";user id="admin";password=""; Jet OLEDB:Database Password=BESTSOFT99')...storeall AS a --导Excel Select * into 新表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 8.0;HDR=YES; DATABASE=D:\Excel.xls', Excel$ )
微软的:如何将 Excel 数据导入 SQL Server http://support.microsoft.com/kb/321686/zh-cn
Data Source= "d:\dd.mdb是指服务器的目录路径,但我如何将客户端的Access文件位置制定给应用程序,由应用程序自动将客户端的数据库文件导入到服务器中,显然制定服务器的路径不是可行的方式!
这种情况下要使用动态SQL,把ACCESS文件写到字符串中,然后构建SQL字符串再执行,例如: ----创建导入Access的存储过程,参数为带路径的文件名 create proc spImportAccess @FilePath varchar(200) as declare @sql varchar(1000) set @sql = 'SELECT a.* into 新表名 FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', ''Data Source="' + @FilePath + '";Jet OLEDB:Database Password=test'')...tb AS a' EXEC(@sql) GO----调用存储过程 EXEC spImportAccess 'd:\dd.mdb'
也可以把新表名称作为参数:----创建导入Access的存储过程 create proc spImportAccess @FilePath varchar(200), --带路径的文件名 @NewTableName sysname --要导入的新表名称 as declare @sql varchar(1000) set @sql = 'SELECT a.* into ' + @NewTableName + ' FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', ''Data Source="' + @FilePath + '";Jet OLEDB:Database Password=test'')...tb AS a' EXEC(@sql) GO----调用存储过程 EXEC spImportAccess 'd:\dd.mdb','新表名'
--导Access
SELECT a.* into 新表名 FROM opendatasource('Microsoft.Jet.OLEDB.4.0',
'Data Source="d:\dd.mdb";Jet OLEDB:Database Password=test')...tb AS a
--有用户密码+数据库密码可以这样写
SELECT a.* into 新表名
FROM opendatasource('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\SDV50.mdb";user id="admin";password="";
Jet OLEDB:Database Password=BESTSOFT99')...storeall AS a
--导Excel
Select * into 新表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 8.0;HDR=YES;
DATABASE=D:\Excel.xls', Excel$ )
http://support.microsoft.com/kb/321686/zh-cn
Data Source= "d:\dd.mdb是指服务器的目录路径,但我如何将客户端的Access文件位置制定给应用程序,由应用程序自动将客户端的数据库文件导入到服务器中,显然制定服务器的路径不是可行的方式!
----创建导入Access的存储过程,参数为带路径的文件名
create proc spImportAccess @FilePath varchar(200)
as
declare @sql varchar(1000)
set @sql = 'SELECT a.* into 新表名 FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
''Data Source="' + @FilePath + '";Jet OLEDB:Database Password=test'')...tb AS a'
EXEC(@sql)
GO----调用存储过程
EXEC spImportAccess 'd:\dd.mdb'
create proc spImportAccess
@FilePath varchar(200), --带路径的文件名
@NewTableName sysname --要导入的新表名称
as
declare @sql varchar(1000)
set @sql = 'SELECT a.* into ' + @NewTableName + ' FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
''Data Source="' + @FilePath + '";Jet OLEDB:Database Password=test'')...tb AS a'
EXEC(@sql)
GO----调用存储过程
EXEC spImportAccess 'd:\dd.mdb','新表名'
假设应用程序的客户端C:\db1.mdb有数据库文件,而数据库服务器端没有此Access文件,那么它能够顺利地转换吗?
请问还有其他办法吗?谢谢啦……
当使用远程服务器上的异源数据时,必须使用异源数据的网络路径,即:
\\网络名\共享名\文件名
以EXECL为例:
假设IP地址为192.168.16.166的远程客户端的D盘的test文件夹下有一个EXECL文件Books1.xls,
本机IP地址为192.168.16.2,要读取该远程Books1.xls文件到本机的SQLSERVER中,则可
这样做:
第一步:将192.168.16.166远程客户端的D:\test文件夹设置为共享,共享名为test;
第二步:修改192.168.16.166远程客户端的WINDOWS防火墙设置,在<例外>中允许<文件和打印机共享>;
第三步:设置网络文件路径:方法1:右键点击我的电脑->映射网络驱动器,假设网络驱动器为Z,映射路径为该远程客户端
的D:\test文件夹,然后这样进行查询:
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=z:\book1.xls;Extended Properties=Excel 8.0')...[Sheet1$]
动态SQL:
declare @sql varchar(1000),@NetPathFile varchar(100)
set @NetPathFile = 'z:\book1.xls'
set @sql =
'SELECT * FROM OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',
''Data Source=' + @NetPathFile + ';Extended Properties=Excel 8.0'')...[Sheet1$]'
EXEC(@sql)方法2:直接使用计算机名或远程计算机的IP:
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=\\192.168.16.166\test\book1.xls;Extended Properties=Excel 8.0')...[Sheet1$]
动态SQL:
declare @sql varchar(1000),@NetPathFile varchar(100)
set @NetPathFile = '\\192.168.16.166\test\book1.xls'
set @sql =
'SELECT * FROM OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',
''Data Source=' + @NetPathFile + ';Extended Properties=Excel 8.0'')...[Sheet1$]'
EXEC(@sql)
以上在本机测试通过.测试环境:
简体中文WindowsServer2003sp1 + 简体中文SQLSERVER2000sp4 + 局域网