CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何用一条SQL语句从A数据库读取一个表的数据写入B数据库的一个拥有相同字段的表

楼主fusoft(黑马)2004-09-04 07:20:46 在 MS-SQL Server / 基础类 提问

A表在A库  
  B表在B库  
  A,B两个表字段完全相同  
  用一条语句从A表里的数据写入B表 问题点数:100、回复次数:13Top

1 楼fusoft(黑马)回复于 2004-09-04 07:22:00 得分 0

用一条语句从A表里读取数据写入B表  
  Top

2 楼askgwf2004(管管)回复于 2004-09-04 07:24:05 得分 0

insert   B表   select   *   from   A表Top

3 楼fusoft(黑马)回复于 2004-09-04 07:52:58 得分 0

大哥!不是在一个数据库里啊!Top

4 楼pengda1i(冒牌大力 V0.4)回复于 2004-09-04 07:56:35 得分 0

insert   B库..B表  
  select   *   from   A库..A表  
  Top

5 楼zjcxc(邹建)回复于 2004-09-04 08:00:04 得分 0

--在同一服务器上  
   
  insert   B库.dbo.B表   select   *   from   A库.dbo.A表  
   
   
  Top

6 楼wxq1142(游虾)回复于 2004-09-04 08:00:51 得分 0

楼上热心Top

7 楼zjcxc(邹建)回复于 2004-09-04 08:01:04 得分 0

--在不同服务器上(假设在A库所在的服务器上操作)  
   
  insert   openrowset('sqloledb','B库的SQL服务器名';'sa';'密码',B库.dbo.B表)  
  select   *   from   A库.dbo.A表  
   
  Top

8 楼zjcxc(邹建)回复于 2004-09-04 08:01:44 得分 0

--在不同服务器上(假设在B库所在的服务器上操作)  
   
  insert   B库.dbo.B表    
  select   *   from   openrowset('sqloledb','B库的SQL服务器名';'sa';'密码',A库.dbo.A表)Top

9 楼fusoft(黑马)回复于 2004-09-04 08:03:15 得分 0

写详细点吧!  
  A数据库名称:aoa           A表名称:table             A表字段:   id,title,content,regtime  
  B数据库名称:newaoa     B表名称:Newtable       B表字段:   id,title,content,regtime  
  求完整可执行的SQL语句!感谢!  
   
  Top

10 楼fusoft(黑马)回复于 2004-09-04 08:07:43 得分 0

邹建大哥终于来了!太好了!  
  1。不在同一服务器上!  
  2。如果字段名称不一样怎么写?  
  3。不要整个表写过去,以后每天都要更新A表数据往B表追加啊Top

11 楼zjcxc(邹建)回复于 2004-09-04 08:11:46 得分 100

--定时同步服务器上的数据(本地的数据修改同步到服务器)  
   
  --例子:  
  --测试环境,SQL   Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test  
  --服务器上的表(查询分析器连接到服务器上创建)  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[user]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [user]  
   
  create   table   [user](id   int   primary   key,number   varchar(4),name   varchar(10))  
  go  
   
  --以下在局域网(本机操作)  
  --state字段为辅助更新而设置的附加字段,字段值说明:null   表示新增记录,1   表示修改过的记录,0   表示无变化的记录  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[user]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [user]  
  GO  
  create   table   [user](id   int   identity(1,1)   primary   key,number   varchar(4),name   varchar(10),state   bit)  
  go  
  --创建触发器,维护state字段的值  
  create   trigger   t_state   on   [user]  
  after   update  
  as  
  update   [user]   set   state=1  
  from   [user]   a   join   inserted   b   on   a.id=b.id  
  where   a.state   is   not   null  
  go  
   
  --为了方便同步处理,创建链接服务器到要同步的服务器  
  --这里的远程服务器名为:xz,用户名为:sa,无密码  
  if   exists(select   1   from   master..sysservers   where   srvname='srv_lnk')  
  exec   sp_dropserver   'srv_lnk','droplogins'  
  go  
  exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','xz'  
  exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa'  
  go  
   
  --创建同步处理的存储过程  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_synchro]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_synchro]  
  GO  
  create   proc   p_synchro  
  as  
  /*--因为MSDTC服务(分布式事务处理需要)工作不稳定,所以下面部分为选用内容  
  --set     xact_abort   on  
  --启动远程服务器的MSDTC服务  
  --exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output  
   
  --启动本机的MSDTC服务  
  --exec   master..xp_cmdshell   'net   start   msdtc',no_output  
   
  --进行分布事务处理,如果表用标识列做主键,用下面的方法  
  --BEGIN   DISTRIBUTED   TRANSACTION  
  --*/  
  --同步删除的数据  
  delete   from   srv_lnk.test.dbo.[user]  
  where   id   not   in(select   id   from   [user])  
   
  --同步新增的数据  
  insert   into   srv_lnk.test.dbo.[user]  
  select   id,number,name   from   [user]   where   state   is   null  
   
  --同步修改的数据  
  update   srv_lnk.test.dbo.[user]   set  
  number=b.number,name=b.name  
  from   srv_lnk.test.dbo.[user]   a  
  join   [user]   b   on   a.id=b.id  
  where   b.state=1  
   
  --同步后更新本机的标志  
  update   [user]   set   state=0   where   isnull(state,1)=1  
  --COMMIT   TRAN --如果启用分布式事务处理,加上此句  
  go  
   
  --创建作业,定时执行数据同步的存储过程  
  if   exists(SELECT   1   from   msdb..sysjobs   where   name='数据处理')  
  EXECUTE   msdb.dbo.sp_delete_job   @job_name='数据处理'  
  exec   msdb..sp_add_job   @job_name='数据处理'  
   
  --创建作业步骤  
  declare   @sql   varchar(800),@dbname   varchar(250)  
  select   @sql='exec   p_synchro'     --数据处理的命令  
  ,@dbname=db_name() --执行数据处理的数据库名  
   
  exec   msdb..sp_add_jobstep   @job_name='数据处理',  
  @step_name   =   '数据同步',  
  @subsystem   =   'TSQL',  
  @database_name=@dbname,  
        @command   =   @sql,  
  @retry_attempts   =   5,   --重试次数  
  @retry_interval   =   5     --重试间隔  
   
  --创建调度  
  EXEC   msdb..sp_add_jobschedule   @job_name   =   '数据处理',    
  @name   =   '时间安排',  
  @freq_type=4,   --4   每天,8   每周,16   每月  
  @freq_interval=1, --作业执行的天数  
  @freq_subday_type=0, --是否重复执行,0x1   在指定的时间,   0x4   分钟,   0x8   小时    
  @freq_subday_interval=1,   --重复周期  
  @freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0  
  @active_start_time   =   00000 --0点开始执行  
   
  --添加目标服务器  
  EXEC   msdb.dbo.sp_add_jobserver    
  @job_name   =   @jobname   ,  
  @server_name   =   N'(local)'    
  go  
  Top

12 楼fusoft(黑马)回复于 2004-09-04 08:15:38 得分 0

真够详细的!太感谢了!Top

13 楼fusoft(黑马)回复于 2004-09-04 08:16:51 得分 0

学到这些给你1000分也不可惜!解决了我多年未解决的远程数据库同步更新的问题!Top

相关问题

  • 求sql语句A表1字段=B表1字段+B表2字段??
  • 求一条sql语句,如果字段b不为空,则别名a1为字段a的值+"y",怎么写
  • 要从表A中取几个字段更新表B中的几个字段,SQL语句如何写?
  • 求一SQL语句,把字段A、B、C的值相加,得到一个新字段??????
  • sql语句, 从表a,表b取数据,关联字段a.hh,b.hh, 关联字段a.hh,b.hh, 取a.hh,b表c字段,select a.hh,sum(b.c) from a,b where a.hh=b.hh gr
  • A表的某个字段值为B表中对应记录的所有字段之和,现怎么样更新A表的该字段(sql语句)?
  • sql语句写法:将表a的某几个字段的数据按照某个字段相同的原则插入到表b的某几个字段下?
  • 一个SQL语句的字段问题
  • 请教设置字段的SQL语句
  • 更改字段顺序 SQL 语句

关键词

  • 字段
  • 数据库
  • 服务器
  • 语句
  • 数据
  • sql
  • 密码
  • sa
  • 表
  • 库

得分解答快速导航

  • 帖主:fusoft
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo