SQL2008-不同数据库之间的触发器
create trigger tr_update_Table_1 
  on   rwqd   
  FOR  UPDATE 
  As
   update dataabc.dbo.Table_1  set NO2='OK' from  dataabc.dbo.Table_1 aa,inserted bb where aa.NO1=bb.xh
  go
PS:
Create Table Student(              --学生表 
        StudentID int primary key,       --学号 
        .... 
       )
Create Table BorrowRecord(               --学生借书记录表 
        BorrowRecord   int identity(1,1),       --流水号   
        StudentID      int ,                    --学号 
        BorrowDate     datetime,                --借出时间 
        ReturnDAte     Datetime,                --归还时间 
        ... 
      )
--用到的功能有: 
        --1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 
        --2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 
     --等等。
--这时候可以用到触发器。对于1,创建一个Update触发器:
Create Trigger truStudent 
       On Student                         --在Student表中创建触发器 
       for Update                          --为什么事件触发 
     As                                        --事件触发后所要做的事情 
       if Update(StudentID)            
       begin
Update BorrowRecord 
           Set StudentID=i.StudentID 
           From BorrowRecord br , Deleted   d ,Inserted i      --Deleted和Inserted临时表 
           Where br.StudentID=d.StudentID
end        
                 
     --理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 
     --一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 
      --                       虚拟表Inserted                     虚拟表Deleted
--在表记录新增时     存放新增的记录                         不存储记录 
--         修改时           存放用来更新的新记录                   存放更新前的记录 
--         删除时           不存储记录                             存放被删除的记录
--一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。
PS:========================================================================================
--*********************************************************************************--                 链接服务器,不同服务器数据库之间的数据操作--*********************************************************************************
1、--创建链接服务器 
exec sp_addlinkedserver   '链接服务器名', ' ', 'SQLOLEDB', '远程服务器名或ip地址 ' 
exec sp_addlinkedsrvlogin  '链接服务器名', 'false ',null, '用户名', '密码' 
2、启动两台服务器的MSDTC服务 
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。3、打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
4、--如要创建触发器   
create   trigger   t_test   on   test   
for   insert,update,delete   
as 
--加上下面两句,否则会提示新事务不能登记到指定事务处理器
set    xact_abort   on  
begin  distributed   tran 
 delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
 where   id   in(select   id   from   deleted)   
 insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
 select   *   from   inserted   
commit tran--查询示例 
select * from 链接服务器名.数据库名.dbo.表名 --导入示例 
select * into 表 from 链接服务器名.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
exec sp_dropserver  '链接服务器名 ', 'droplogins ' --**************************************************************************************                --连接远程/局域网数据(openrowset/openquery/opendatasource) --**************************************************************************************
--1、openrowset --查询示例 
select * from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名) --生成本地表 
select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名) --把本地表导入远程表 
insert openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名) 
select *from 本地表 --更新本地表 
update b 
set b.列A=a.列A 
 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)as a inner join 本地表 b 
on a.column1=b.column1 --2、openquery --首先创建一个连接创建链接服务器 exec sp_addlinkedserver   '链接服务器名', ' ', 'SQLOLEDB', '远程服务器名或ip地址' 
exec sp_addlinkedsrvlogin  '链接服务器名', 'false ',null, '用户名', '密码' 
--查询 
select * FROM openquery(链接服务器名,  'SELECT *  FROM 数据库.dbo.表名') 
--把本地表导入远程表 
insert openquery(链接服务器名,  'SELECT *  FROM 数据库.dbo.表名') 
select * from 本地表 
--更新本地表 
update b 
set b.列B=a.列B 
FROM openquery(链接服务器名,  'SELECT * FROM 数据库.dbo.表名') as a  
inner join 本地表 b on a.列A=b.列A --3、opendatasourceSELECT   * 
FROM   opendatasource( 'SQLOLEDB',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码' ).test.dbo.表名
--把本地表导入远程表 
insert opendatasource( 'SQLOLEDB',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码').数据库.dbo.表名 
select * from 本地表
SQL2008-不同数据库之间的触发器的更多相关文章
- 多种数据库之间的同步工具SymmetricDS
		
代码:https://github.com/JumpMind/symmetric-ds 原理: 通过触发器模式同步时,是将数据库的变化记录到某个系统表中,然后在客户端建立缓冲,并定期将变化push到接 ...
 - 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB
		
在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...
 - (转)SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
		
最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...
 - 在SQL2008配置数据库镜像1418错误的处理
		
在SQL2008配置数据库镜像错误一般都由以下原因造成 1.主体.镜像服务器SQL SERVER选择本账号切保持一致 2.在数据库镜像配置向导中的“服务账号”选项中请选择需要同步数据库的登陆名,例如数 ...
 - 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】
		
记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...
 - SQL不同服务器数据库之间的数据操作整理(完整版)
		
---------------------------------------------------------------------------------- -- Author : htl25 ...
 - Java与数据库之间时间的处理
		
Java与数据库之间时间的处理 在数据库中建表: DROP TABLE IF EXISTS `times`; CREATE TABLE `times` ( `id` int(11) NOT NULL ...
 - Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
		
实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...
 - 在db2中 两个数据库之间的两个表的联合查询
		
大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...
 
随机推荐
- hdu 1849 Rabbit and Grass 博弈论
			
水题,转化Nim 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include&l ...
 - hdu 3400 Line belt 三分法
			
思路:要求最短时间从A到D,则走的路线一定是AB上的一段,CD上的一段,AB与CD之间的一段. 那么可以先三分得到AB上的一个点,在由这个点三分CD!! 代码如下: #include<iostr ...
 - IOS - DatePicker的使用
			
UIDatePicker *picker = [[UIDatePicker alloc] init]; picker.datePickerMode = UIDatePickerModeDate; pi ...
 - Android:时间控件
			
1.选择时间TimePicker 监听器:OnTimeChangedListener(obj,int hour,int minute); 常用: 获取时:getCurrentHour(). 获取 ...
 - 安装Ubuntu双系统系列——更换源
			
Ubuntu 有一个非常有用的命令 apt-get,它可以帮助你下载软件,还可以安装,下载并安装的命令是 apt-get install. 那Ubuntu默认是从哪里下载软件呢,这可以查看文件/etc ...
 - 转载:最小生成树-Prim算法和Kruskal算法
			
本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...
 - 1019.Line Painting(线段树 离散化)
			
1019 离散化都忘记怎么写了 注意两个端点 离散化后用线段树更新区间 混色为-1 黑为2 白为1 因为N不大 最后直接循环标记这一段的颜色查找 #include <iostream> ...
 - SQL列数据转换为字符串
			
行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...
 - 【spring-boot】快速构建spring-boot微框架
			
spring-boot是一个快速构建环境的一套框架,其设计理念是尽可能的减少xml的配置,用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义 ...
 - (Java)《head first java》值得Java或面向对象基础的新手看。
			
看完这本书后本人收获良多. 内容对Java以及面向对象的入门者非常友好. 抽象的内容惯用图解的方法来剖析,通俗易懂 之前看C#入门经典的面向对象时,依然浓浓的一头雾水. (1)很不解为何实例化要写成A ...