一个在本地MSSQL数据库,
一个是服务器上的MSSQL数据库。
请问如何用最快的方法把这两个库的数据互导?两个库的表结构是一样的。采用遍历的方法奇慢!我在大富翁上找到这个:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1042851
_______________________________________________________________________
以上所有回答均是垃圾答案,对Access和SQLSERVER的理解都不够深入,最佳方案为:
在Access中选择“表”页,右键单击空白部分,选择链接表,通过ODBC链接SQL数据库,
并指定相关表名。这样就可以在Access中像操作本地Access表一样操作Sql Server表了。
大量添加数据采用语法(注意是一句Sql):
insert into Sqlserver链接表表名 select * from Access本地表表名
速度比用Insert into 单条方式快10倍以上!!!
如果不采用链接表,还可以在Access中直接使用类似语法:
Select * FROM table in "" [odbc] [dns=sqlserver]语句动态连接Sqlserver表,语法
在Access帮助中有。
_______________________________________________________________________请问在SQLServer中是否可行?应该如何实现?
ACCESS中的链接表是如何实现的?

解决方案 »

  1.   

    干吗不用batchmove控件阿?
    我这里Oracle 与DB2互导....暴快的说 5W记录10余秒
      

  2.   


    问题并不是一句用“XXX”啦就可以解决的。大家都知道delphi中的控件多如牛毛,除了那些有共性的之后,有些虽然有名,但一定还是有很多人连碰都没有碰过,更不用说会用。我这个问题在DELPHI提出,当然是要在DELPHI中解决的。在只能在Sql Server中解决的暂时不用在这里回答。up
      

  3.   

    直接用sql server的工具就可以了,不用编程的!!
      

  4.   

    *_*楼上的就会搞笑。我也知道直接用sql server的工具就可以的,但是,客户懂吗?
    我知道不懂可以教他们,但是这样,我们不如教他们会编程,那样会更好,我们就不用编程了。再up
      

  5.   

    insert into ClientTable select * from ServerTable
      

  6.   

    使用联结服务器:
    EXEC sp_addlinkedserver 
       '别名', 
       '', 
       'MSDASQL',
       NULL,
       NULL,
       'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
    GO然后你就可以如下:
    select * from 别名.库名.dbo.表名
    insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
    select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
    go
      

  7.   

    楼上的是用 SQL Server 的方法实现的,也不错呀。
      

  8.   

    如果是MSSQL数据库,他支持从服务器名到表名的引用
    select 字段名 from 服务器名.实例名.数所库名.表名插入insert也同样支持这些另,数据不多就可以使用数据库文件的复制,也可以使用右击数据库,备份。在任何程序设计语言里面就只能运行SQL语句来备份
      

  9.   

    对于这个问题,现在我也正要解决,提供思路,请各位指教:
    现象(最复杂度):由于网络阻塞、未使用系统等原因,各客户端都可能输入数据,产生每个节点的本机数据库与SERVER的数据库不一致。如:
    1、本机有数据,SERVER无数据
    2、SERVER有数据,本机无数据
    办法:
    1、程序作好网络的连接通路检查,SERVER的数据库未通使用本机,
    2、本机数据库与SERVER的数据库进行比较,然后互补数据,
      

  10.   

    问题算是(还存在问题)解决了。存储过程如下:
    drop procedure dbSync
    GO/*     数据同步                      */
    CREATE PROCEDURE dbSync 
           @sTabelName  varchar(255),    --要同步的表名
           @sKeyField   varchar(255),    --关键字段
           @sServer     varchar(255),    --服务器名称或IP
           @sUserName   varchar(255),    --登录到服务器的用户名,一般为sa
           @sPassWord   varchar(32)      --用户登录到服务器的密码 
    AS
       /*删除临时表*/
      if exists (select * from dbo.sysobjects where id = object_id(N'tempTbl') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
      drop table tempTbl
      
                    
      declare @sql VARCHAR(2000)   /*把表@sTabelName[本地]的数据拷贝到临时表*/
       
      set @sql='select * into tempTbl from '
      set @sql=@sql + ' OPENDATASOURCE( '
      set @sql=@sql + '''SQLOLEDB.1'','
      set @sql=@sql + '''Persist Security Info=True;User ID=' + @sUserName
      set @sql=@sql + ';Password=' + @sPassWord
      set @sql=@sql + ';Initial Catalog=toys;Data Source=' + @sServer
      set @sql=@sql + ''').toys.dbo.'+@sTabelName  EXEC(@sql)    
      /* 把@sTabelName[本地]中的@sTabelName[远程]表中没有的数据插入到临时表中*/  set @sql='insert into tempTbl select * from '+@sTabelName+' where ['+@sKeyField+'] not in (select ['+@sKeyField+'] from tempTbl)'  EXEC(@sql)
        /*清空表@sTabelName[本地]*/
      set @sql='truncate table '+@sTabelName  EXEC(@sql)  
      --取得列名
      declare @MySql VARCHAR(2000)
      set @MySql=''
      declare @title varchar(20)  DECLARE titles_cursor CURSOR FOR   SELECT name from syscolumns where id=object_id(@sTabelName)  OPEN titles_cursor  FETCH NEXT FROM titles_cursor INTO @title  WHILE @@FETCH_STATUS = 0
      BEGIN
        if @title<>'id' 
        begin
          if @MySql = ''
            set @MySql = @MySql + @title
          else
            set @MySql = @MySql + ',' + @title
        end
        FETCH NEXT FROM titles_cursor INTO @title
      END  CLOSE titles_cursor  DEALLOCATE titles_cursor
      --取列名结束
      /*把临时表的内容插入到表@sTabelName[本地]*/
      set @sql='insert into '+@sTabelName+' select '+@MySql+' from tempTbl'  EXEC(@sql) 
      /*删除临时表*/
      if exists (select * from dbo.sysobjects where id = object_id(N'tempTbl') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
      drop table tempTblGO
      

  11.   

    上面的一个地方的注释写错:
      /*把表@sTabelName[本地]的数据拷贝到临时表*/
       
      set @sql='select * into tempTbl from '
      set @sql=@sql + ' OPENDATASOURCE( '
      set @sql=@sql + '''SQLOLEDB.1'','
      set @sql=@sql + '''Persist Security Info=True;User ID=' + @sUserName
      set @sql=@sql + ';Password=' + @sPassWord
      set @sql=@sql + ';Initial Catalog=toys;Data Source=' + @sServer
      set @sql=@sql + ''').toys.dbo.'+@sTabelName________________________________________________________________________  /*把表@sTabelName[远程]的数据拷贝到临时表*/
      /*                ^^^^-------------------*/
       
      set @sql='select * into tempTbl from '
      set @sql=@sql + ' OPENDATASOURCE( '
      set @sql=@sql + '''SQLOLEDB.1'','
      set @sql=@sql + '''Persist Security Info=True;User ID=' + @sUserName
      set @sql=@sql + ';Password=' + @sPassWord
      set @sql=@sql + ';Initial Catalog=toys;Data Source=' + @sServer
      set @sql=@sql + ''').toys.dbo.'+@sTabelName