一个在本地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中的链接表是如何实现的?
一个是服务器上的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中的链接表是如何实现的?
我这里Oracle 与DB2互导....暴快的说 5W记录10余秒
问题并不是一句用“XXX”啦就可以解决的。大家都知道delphi中的控件多如牛毛,除了那些有共性的之后,有些虽然有名,但一定还是有很多人连碰都没有碰过,更不用说会用。我这个问题在DELPHI提出,当然是要在DELPHI中解决的。在只能在Sql Server中解决的暂时不用在这里回答。up
我知道不懂可以教他们,但是这样,我们不如教他们会编程,那样会更好,我们就不用编程了。再up
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
select 字段名 from 服务器名.实例名.数所库名.表名插入insert也同样支持这些另,数据不多就可以使用数据库文件的复制,也可以使用右击数据库,备份。在任何程序设计语言里面就只能运行SQL语句来备份
现象(最复杂度):由于网络阻塞、未使用系统等原因,各客户端都可能输入数据,产生每个节点的本机数据库与SERVER的数据库不一致。如:
1、本机有数据,SERVER无数据
2、SERVER有数据,本机无数据
办法:
1、程序作好网络的连接通路检查,SERVER的数据库未通使用本机,
2、本机数据库与SERVER的数据库进行比较,然后互补数据,
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
/*把表@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