insert into PhoneNum(UserName,Number) 
SELECT * FROM openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=D:\Book1.xls','select * from [sheet1$]')我需要将本地的Excel导入到远程的服务器的数据库下,这句不行啊 !!
怎么弄??要上将文件先传到服务器上,再导入太麻烦了,有没有什么SQL语句一次搞定啊 ??
关键是这个客户端的IP他也不一定啊  

解决方案 »

  1.   

    导入导出的存储过程--下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中)if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_exporttb]
    GO/**//*--数据导出EXCEL
     
     导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
     ,如果文件不存在,将自动创建文件
     ,如果表不存在,将自动创建表
     基于通用性考虑,仅支持导出标准数据类型--邹建 2003.10(引用请保留此信息)--*//**//*--调用示例 p_exporttb @tbname='地区资料',@path='c:',@fname='aa.xls'
    --*/
    create proc p_exporttb
    @tbname sysname,    --要导出的表名
    @path nvarchar(1000),   --文件存放目录
    @fname nvarchar(250)=''  --文件名,默认为表名
    as
    declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
    declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)--参数检测
    if isnull(@fname,'')='' set @fname=@tbname+'.xls'--检查文件是否已经存在
    if right(@path,1)<>'' set @path=@path+''
    create table #tb(a bit,b bit,c bit)
    set @sql=@path+@fname
    insert into #tb exec master..xp_fileexist @sql--数据库创建语句
    set @sql=@path+@fname
    if exists(select 1 from #tb where a=1)
     set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
           +';CREATE_DB="'+@sql+'";DBQ='+@sql
    else
     set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
        +';DATABASE='+@sql+'"'
    --连接数据库
    exec @err=sp_oacreate 'adodb.connection',@obj out
    if @err<>0 goto lberrexec @err=sp_oamethod @obj,'open',null,@constr
    if @err<>0 goto lberr/**//*--如果覆盖已经存在的表,就加上下面的语句
    --创建之前先删除表/如果存在的话
    select @sql='drop table ['+@tbname+']'
    exec @err=sp_oamethod @obj,'execute',@out out,@sql
    --*/--创建表的SQL
    select @sql='',@fdlist=''
    select @fdlist=@fdlist+',['+a.name+']'
     ,@sql=@sql+',['+a.name+'] '
      +case 
       when b.name like '%char' 
       then case when a.length>255 then 'memo'
        else 'text('+cast(a.length as varchar)+')' end
       when b.name like '%int' or b.name='bit' then 'int'
       when b.name like '%datetime' then 'datetime'
       when b.name like '%money' then 'money'
       when b.name like '%text' then 'memo'
       else b.name end
    FROM syscolumns a left join systypes b on a.xtype=b.xusertype
    where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
     and object_id(@tbname)=id
    select @sql='create table ['+@tbname
     +']('+substring(@sql,2,8000)+')'
     ,@fdlist=substring(@fdlist,2,8000)
    exec @err=sp_oamethod @obj,'execute',@out out,@sql
    if @err<>0 goto lberrexec @err=sp_oadestroy @obj--导入数据
    set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1
       ;DATABASE='+@path+@fname+''',['+@tbname+'$])'exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname)returnlberr:
     exec sp_oageterrorinfo 0,@src out,@desc out
    lbexit:
     select cast(@err as varbinary(4)) as 错误号
      ,@src as 错误源,@desc as 错误描述
     select @sql,@constr,@fdlist
    go
     
      

  2.   

    打开远程数据库的连接后再用ACE操作行了
      

  3.   

    --篇文章主要总结MS-SQL数据的导入导出,包括MS-SQL  对远程 MS-SQL,Oracle,Access数据的读取,更--新,插入和删除, 以及对以Excel,txt文件存储数据的导入与导出,和bcp的简单使用。  -- 以及几个函数OPENROWSET(),OPENQUERY(),OPENDATASOURCE()的使用       --类别:总结
           --charry0110(晓风残月)
    --*远程库select * from openrowset(''SQLOLEDB'',''远程服务器名'';''用户名'';''密码'';''库名.dbo.表名'') insert into openrowset(''SQLOLEDB'',''BERRY'';''sa'';''sa'',tt.dbo.ALaw_BestbigPunish)(OneName) select ''c''--添加select * from openrowset(''SQLOLEDB'',''BERRY'';''sa'';''sa'',tt.dbo.ALaw_FilePunish)--选择delete from openrowset(''SQLOLEDB'',''BERRY'';''sa'';''sa'',tt.dbo.ALaw_BestbigPunish)--删除update openrowset(''SQLOLEDB'',''BERRY'';''sa'';''sa'',tt.dbo.ALaw_BestbigPunish)--更新set OneName=''b''--注意''192.168.18.252'';''sa'';''abc''中间是";",而不是","。select a.* from OPENQUERY(''SQLOLEDB'',''BERRY'';''sa'';''sa'',库名.dbo.表名) aSELECT a.* FROM OPENQUERY (''oradb'',''192.168.0.111'';''sa'';''sa'',库名.dbo.表名) aSELECT * FROM OPENDATASOURCE(''SQLOLEDB'',''Data Source=192.168.0.111;User ID=sa;Password=sa'').tt.dbo.ALaw_BestbigPunishINSERT INTO OPENDATASOURCE(''SQLOLEDB'',''Data Source=192.168.0.111;User ID=sa;Password=sa'').tt.dbo.ALaw_FilePunish(CaseName) select Num from aa.dbo.ydy select * from  OPENROWSET(''SQLOLEDB'',''192.168.0.111'';''sa'';''sa'', ''select * from tt.dbo.ALaw_FilePunish'')insert into OPENROWSET(''SQLOLEDB'',''192.168.0.111'';''sa'';''sa'', ''select CaseName from tt.dbo.ALaw_FilePunish'') SELECT Num FROM aa.dbo.ydy--第二个参数webconfig连接字符串可以使用delphi、visual studio等开发工具中的ADO控件自动生成相应的连接字符串--*Excelselect a.* from OpenRowSet(''Microsoft.Jet.OLEDB.4.0'',''EXCEL 8.0;DataBase=D:\test.xls'',sheet1$) aselect a.* into ydy from OpenRowSet(''Microsoft.Jet.OLEDB.4.0'',''EXCEL 8.0;DataBase=D:\test.xls'',sheet1$) aSELECT a.* FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source= "D:\test.xls";Extended properties=Excel 8.0'')...sheet1$ a select * from ydy--注意sheet1$是否正确--*AccessSELECT * FROM  OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''D:\db.mdb'';''admin'';'''',''SELECT * FROM vote'')select * from OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',         ''Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db.mdb;Persist Security Info=False'')...vote--*txtselect * from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Text;DATABASE=D:\'',[sopendata#txt])select * from OPENDATASOURCE(''MICROSOFT.JET.OLEDB.4.0'',''Text;DATABASE=D:\'')...[sopendata#txt]delete from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Text;DATABASE=D:\'', [sopendata#txt])/*ID,Name,Num1,Jim,32,Kate,43,Tom,5*/--在这里文件名中的.要使用#代替,在向文本导出时,不仅文本文件要存在,而且第一行必须和要导出表的字段一至--非SQL Server数据库在OPENDATASOURCE(...)后面引用数据库中的表时使用"...”,insert into OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Text;DATABASE=D:\'',[sopendata#txt])select * from t1--*sql不支持导入word --解决一:文本文件,可惜这样是要求这些数据排版得有规律。  --解决二:一般是先拷贝进excel,然后再导入sqlserver的 ----bcp--假设要从硬盘文件c:\DT.''txt''中导入文件,则如下代码实现:EXEC master..xp_cmdshell ''bcp "aa.dbo.ydy" in D:\dbo.txt -c -charry -sa -sa''--假设导出文件到c:\DT.''txt'',则如下代码实现:EXEC master..xp_cmdshell ''bcp "aa.dbo.ydy" out c:\DT.txt -c -Sservername -Usa -Ppassword''EXEC master..xp_cmdshell ''bcp "Select * from dbname..tablename"queryout c:\DT.txt -c -Sservername -Usa -Ppassword''
      

  4.   

    Number 为关键字也可以用作字段名吗?
      

  5.   

    1.用vb,vfp,delphi等实现
    2.本地安装一sql server
      建读excel表的视图
      远程数据库再读本地数据库视图
      

  6.   

    难道要让每一个用户在安装客户端的时候还要顺带着安装个SQL Server?
      

  7.   

    没有一个真正能导入WORD的吗????