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 本地表

时间: 2024-11-08 23:48:22

SQL2008-不同数据库之间的触发器的相关文章

数据库后台优化——触发器

为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的. 在一对多的数据库关系中,比如卡号类别与卡号之间的关系.如果要取消某个类别的时候,就要连同齐下的所有卡号都删除.在现实中,注册的时候一般都会进行充值,当我想card表里面写东西的时候,就要向recharge表里面写一条充值记录.完成这两个操作才算完成这个功能的实现. 对于以上的需求,每个功能的实现 都伴随着多条sql语句的执行. 为了解决上面的问题,一共有两种解决方法.一是存储过程,二是触发器.上篇博客中已经讲解

DB2与非DB2数据库之间远程复制

一.背景 DB2(DB2认证 DB2培训 ) 联合数据库(数据库培训 数据库认证 )是分布式数据库管理的特殊形式.在联合数据库系统中,可以通过一个SQL 命令来发出对多个数据源的命令请求.DB2 与非 DB2 数据库之间进行复制之前,首先需要保证非 DB2 数据源可以被 DB2 ESE Version 8 federated database访问.对于DB2 Replication Version 8 所需的联合数据库功能可以在现有发布的 DB2 ESE Version 8 和 DB2 Conn

关系型数据库和非关系型数据库之间的那些区别(一)

说说关系型数据库和非关系型数据库之间的那些区别 第一弹 就拿现在最流行的两种数据库来说吧:mysql和mongodb(介于关系型和非关系型之间的一种产品,在这里面我们就当做非关系型数据库用来和mysql比较一下) 举个实际好理解的的例子:学生选课的系统(简化来说举出系统里面的两个:学生,课程) 首先说在mysql里面建立的模型是 学生表(student): S Sid name gender age address email college class 1 张三 女 19 a 111 外语 1

SQL不同服务器数据库之间的数据操作整理(完整版)

---------------------------------------------------------------------------------- -- Author : htl258(Tony) -- Date : 2010-06-25 22:23:18 -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1

创建数据库之间的连接

数据库之间的连接:(db_link) 通过一台数据库查询另一台数据的数据 服务端: 开启监听 开启数据库fsdb 使用测试数据:system.xxx 表 客户端: 创建:tnsnames.ora  #tns 名字p1 登录到本地一台数据库(非fsdb) 创建db_link: create database link fsdb_link connect to system identified by oracle using 'p1'; #create database link db_link的

postgresql 测试环境和生产环境2个数据库之间在线导数据

用pg_dump但不产生中间文件,直接在2个数据库之间导数据. 本机执行从本地库导出数据到远程库 pg_dump -h 127.0.0.1 -U postgres dbname | psql -h remotehost -U postgres dbname 本机执行从远程数据库导入数据到本地库 pg_dump -h remotehost -U postgres dbname | psql -h 127.0.0.1 -U postgres dbname 版权声明:本文为博主原创文章,未经博主允许不

tomcat服务器乱码问题,tomcat与数据库之间的编码统一转换

在tomcat目录的conf目录下,修改server.xml文件,在下面截图中的位置加上URIEncoding="UTF-8"则表示tomcat编码转换为utf-8风格, 一般在前台获得相应的值后都会处理编码问题,如用String 类的转码,URLEncoder等转码以至于传到数据库不会乱码 tomcat服务器乱码问题,tomcat与数据库之间的编码统一转换

PHP历程(PHP与MYSQL数据库之间连接、创建和关闭)

<?php define('WXLEVELS_DB_HOST','127.0.0.1'); //服务器 define('WXLEVELS_DB_USER','root'); //数据库用户名 define('WXLEVELS_DB_PASS','123456'); //数据库密码 define('WXLEVELS_DB_NAME','PvUv'); //默认数据库 define('DB_CHARSET','utf8'); //数据库字符集 define('TIMEZONE',"PRC&qu

无数据库全脚本触发器设想

从有了计算机发展到今天,人类世界被代码完全改造,没有代码就没有如今的五彩斑斓的社会.对为代码的创造而努力的前辈们,我们应该心怀敬意. 接触过代码的都知道,代码需要数据库的支持可以更好的发挥能量.经过数代人的努力,代码机制的完善达到了无人能打破的瓶颈.我对代码的理解并不深刻,也没高深的码码功底,但本着自己对现有的代码的分析,大胆提出无数据库全脚本触发器设想.不是对前辈们创造的代码的质疑,只是我个人对代码的一个愿景. 数据库的出现,给了代码一个近乎完美的缓冲,我们可以借助代码写入我们想要存储的数据到