请问各位大虾如何才能实现将客户端的Excel,或Access文件导入到服务器中的MSSQL中?
非常急啊!排除采用上传文件的方式!

解决方案 »

  1.   

    方法很多,主要用到两种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$ )
      

  2.   

    微软的:如何将 Excel 数据导入 SQL Server
    http://support.microsoft.com/kb/321686/zh-cn
      

  3.   


        Data  Source=  "d:\dd.mdb是指服务器的目录路径,但我如何将客户端的Access文件位置制定给应用程序,由应用程序自动将客户端的数据库文件导入到服务器中,显然制定服务器的路径不是可行的方式!  
      

  4.   

    这种情况下要使用动态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'
      

  5.   

    也可以把新表名称作为参数:----创建导入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','新表名'
      

  6.   

    楼上可能没有明白我的意思,即便使用存储过程,那其中的@FilePath也是服务器端的文件路径吧?
    假设应用程序的客户端C:\db1.mdb有数据库文件,而数据库服务器端没有此Access文件,那么它能够顺利地转换吗?
      

  7.   

    若将客户端设置为链接服务器,是不是需要将每台客户端都安装MSSQL?若是的话,这岂不是太不现实了!
    请问还有其他办法吗?谢谢啦……
      

  8.   

    映射一下共享目录试试。或者用程序将MDB文件上传到服务器指定的目录中。
      

  9.   

    不是在每台客户端都安装MSSQL.
    当使用远程服务器上的异源数据时,必须使用异源数据的网络路径,即:
    \\网络名\共享名\文件名
    以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 + 局域网