创建一个触发器,它将在另一个表更新时在表中插入记录

2024-02-29

假设我有表 T1 和 T2

Columns of T1 -->Value
Columns of T2 -->OldValue NewValue

我需要的是一个触发器,它将在 T1 更新时在 T2 中插入一条记录,我还需要知道旧值和新值,我以前从未使用过触发器,所以有人可以帮助我吗,我该怎么办创建这个触发器。是否可以,谢谢。


好吧,你开始编写一个触发器CREATE TRIGGER:

CREATE TRIGGER NameOfTheTriggerPlease

应触发附加操作的表是T1所以应该定义触发器ON该表:

CREATE TRIGGER T1OnUpdate  /* that's just an example,
                              you can use a different name */
ON T1

应调用触发器的操作是UPDATE时间是AFTER更新,所以……

CREATE TRIGGER T1OnUpdate
ON T1
AFTER UPDATE

现在是时候介绍一下body触发器的,即触发器实际应该执行的语句。你介绍身体AS关键字后跟语句本身。

在你的情况下,只有一个声明,INSERT,这是显而易见的。不那么明显的是我们将如何访问旧的和新的价值观。现在,SQL Server 为您提供两个虚拟表,INSERTED and DELETED,你可以很容易地猜到前者包含所有新值,后者包含旧值。

这些表与触发器分配到的表具有相同的结构,即T1。它们仅包含受特定影响的行UPDATE调用触发器的语句,这意味着可能有多个。反过来,这意味着您需要在您的数据库中有一些主键或一个唯一的列(或一组列)。T1您可以在触发器中使用该表来匹配已删除和插入的行。 (事实上​​,您可能还需要您的T2表有一列将引用T1的主键,这样您以后就可以确定哪一行T1有哪些值存储在T2.)

出于本答案的目的,我假设有一个名为的主键列PK和同名的外键列T2。还有INSERT那么语句可能如下所示:

CREATE TRIGGER T1OnUpdate
ON T1
AFTER UPDATE
AS
INSERT INTO T2 (PK, OldValue, NewValue)
SELECT i.PK, i.Value, d.Value
FROM INSERTED i INNER JOIN DELETED d ON i.PK = d.PK

最后(但并非最不重要的)一件事要记住:整个CREATE TRIGGER语句应该是批处理中唯一的语句,即前面不应该有任何语句CREATE TRIGGER关键字(但您可以在那里添加注释),同样,后面的所有内容AS关键字被视为触发器主体的一部分(但您可以将GO例如,如果您在 SQL Server Management Studio 中运行脚本,则指示语句结束的分隔符)。

有用的阅读:

  • 创建触发器 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms189799.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个触发器,它将在另一个表更新时在表中插入记录 的相关文章

  • 仅当列不为 NULL 时才连接列

    我有一个像这样的 SQL Server 表 PERSON NAME PHONE PHONE1 PHONE2 PHONE CONCAT Name1 12345 Null Null Null
  • MySQL - 将字段的默认值设置为字符串连接函数

    我有一个看起来有点像这个的表 actor forename surname stage name 我想将 stage name 更新为默认值 forename surname So that insert into actors foren
  • 如何持续交付基于SQL的应用程序?

    我希望将持续交付概念应用到我们正在构建的 Web 应用程序中 并想知道是否有任何解决方案可以保护数据库免受意外错误提交的影响 例如 删除整个表而不是单个记录的错误 根据持续交付原则 如何限制这个问题的影响 即应用程序逐渐部署在基础设施的各个
  • SQL Server:十进制精度/小数位数产生奇怪的结果

    我正在为一个项目编写一些 SQL 我注意到 SQL Server 中一些看似奇怪的行为 涉及除以小数时的答案 以下是一些示例 说明了我所看到的行为 DECLARE Ratio Decimal 38 16 SET Ratio CAST 210
  • 是否可以在 postgresql 中创建触发器而不执行过程?

    我想创建一个程序 其主体为 BL 我在 SQL 中找到了相同的示例 但在 postgresql 中没有找到 每个 RDBMS 都有自己的 SQL 语言 您无法在 PostgreSQL 中创建触发器 因为您可以在 Oracle MS SQL
  • SQL IN 子句比单个查询慢

    我正在使用 Hibernate 的 JPA 实现和 MySQL 5 0 67 MySQL 配置为使用 InnoDB 在执行 JPA 查询 转换为 SQL 时 我发现使用IN子句比执行单个查询慢 例子 SELECT p FROM Person
  • SQL查询获取列的精度值

    我需要一个 SQL 查询来获取某些列的精度值 我主要关心十进制类型列 并且我需要相同的精度值 我意识到在某些版本和数据库服务器供应商中可以这样做 如果您能列出其中的一些 那就太好了 对于 SQL 服务器 select precision f
  • 是否可以在 Hibernate 中使用分析函数?

    有没有办法在 Hibernate 中使用类似 sql server 的分析函数 就像是 select foo from Foo foo where f x max f x over partition by f y 您正在寻找本机 SQL
  • 将记录与另一个表上的最新记录连接

    我正在尝试创建一个 SQL 视图 我如何从一个表中选择最新的记录 而其他记录保持原样 我需要从所有表中选择所有记录 这工作正常 但我需要仅按日期选择最新的提案 这是我遇到的问题 这是我到目前为止所拥有的 SELECT TOP 100 PER
  • 如何消除错误 3002?

    假设我在 SQL Server 2008 中有以下表定义 CREATE TABLE Person PersonId INT IDENTITY NOT NULL PRIMARY KEY Name VARCHAR 50 NOT NULL Man
  • 带可选参数的 SQL 更新命令?

    我将大约 500 000 个对象插入数据库 其中许多对象是相同的 在数据库中具有相同的主键表示 但其他字段可能不同 因此我使用方法 更新 如果没有行受影响 插入 问题是 有时一个对象的某些字段设置为 null 从文件中无法读取 并且已经在数
  • SSRS 显示前 n 个,但 SUM 包含所有值

    我目前在 SSRS 中有一个包含多行的 tablix 但我希望只显示前 5 行 但底部的总列包含表中的行数的值 例子 NameID Sales of Total 1 100 4 70 3 65 2 50 7 35 DO NOT DISPLA
  • Oracle 函数编译成功,但在执行 PLS-00221 时抛出错误:不是过程或未定义

    我有简单的oracle功能 create or replace function abs test func test in in number return number is test out number BEGIN test out
  • 如何使用 pgAdmin 恢复 postgreSQL 转储文件?

    我有一个 dmp 文件 想要从中恢复数据库 使用 pgAdmin 我该怎么做 在 PgAdmin3 内 在您正在使用的服务器中创建一个新数据库 右键单击该数据库并选择 恢复 使用 浏览器 按钮选择 dmp 文件 选择 恢复 开始恢复数据库
  • 从 Visual Studio 调试 SQL Server 2005 中的存储过程?

    我在这里和其他地方看到很多令人沮丧的问题 但没有明确的答案 我试图让存储过程进行调试 但没有成功 客户端 VS2005或VS2008 两者都不起作用 当我从存储过程上下文菜单中选择 步入存储过程 时 我在调试窗口中看到 已被用户取消 这就是
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 获取 SQL 表上未使用的唯一值

    我有一个表 其中有一列描述数字 ID 该 ID 对于所有行都是唯一的 但它不是主键 数字 ID 是有限的 假设答案可以是从 1 到 10 SELECT ID FROM TABLE ID 1 2 5 我必须 通过 UI 向用户呈现未使用的值
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from

随机推荐

  • IE10 行高错误与显示:内联块;和溢出:隐藏;

    我最近在 IE10 中遇到了一个特殊问题 sigh 看来如果你使用 display inline block 与溢出 隐藏一起使用 IE10 会弄乱你的行高 我尝试使用 Vertical align middle 修复它但这仅几乎解决了 I
  • Prestashop - 付款验证后更改订单状态

    付款验证后 订单状态将变为 付款已验证 法语为 付款接受 我想在付款验证时设置另一个状态 因此历史记录将显示以下内容 Current status My personnal status History My personnal statu
  • 使用 HTML5 文件 API 检查文件是否已更改

    好的 我有一个程序 它将一些特定数据输出到制表符分隔的变量文件中 我一直在使用 Excel 打开和查看文件内容 但是我发现 Excel 坚持锁定它打开的每个文件 这非常烦人 因为如果我在 Excel 中打开文件 我的程序就会崩溃 但我真的很
  • EL 2.1 和 2.2 之间的差异

    我正在寻找 EL 2 1 和 2 2 之间的差异列表 我知道 EL 2 1 和 2 2 之间的一个区别是 2 2 中传递方法参数的能力 还有其他区别吗 有没有可用的功能比较表来说明差异 我已经找了好几天了 到目前为止还没有找到它 谢谢 答案
  • 如何释放 C++ WinRT 值结构的内存

    我是否必须以及如何从已返回到托管 C 项目的 Windows 运行时组件中创建的值结构中释放内存 我声明了该结构 Custom struct public value struct PlayerData Platform String Na
  • 计算不同字段中具有匹配值的记录数

    我有一个这样的表 myTable id name orig id 01 Bill 02 Tom 01 03 Sam 01 04 Alex 02 05 Phil 06 Bob 01 我想要一个返回每条记录的查询 但添加了一个列 其中包含 or
  • Form.ShowDialog(IWin32Window) 应该与任何窗口句柄一起使用吗?

    使用时System Windows Forms ShowDialog IWin32Window 我应该能够传递一个IWin32Window代表任何窗口句柄并且它是否相对于该窗口是模态的 作为 Internet Explorer 7 扩展的一
  • 在 Heroku 上更新应用程序而不丢失图像链接

    我在 Heroku 上有一个应用程序 用户可以在其中添加图像 当我更新这个应用程序时git push heroku master 所有图像都消失了 只留下断开的链接 你知道如何避免吗 Heroku 对他们的文件系统有特殊的限制 因为它只读
  • 在rails中assert_select第一个和第二个html表格单元格内容

    我有以下 html 表 table class list user permission tr th Name th th Permission th tr tr td test user01 td td Reading permissio
  • 托管 Blazor WASM GetFromJsonAsync:JSON 值无法转换为 System.Collections.Generic.IEnumerable`

    我尝试过挖掘和调试 但似乎无法弄清楚为什么 Http Json GetFromJsonAsync 无法转换 我得到的错误如下 删节 blazor webassembly js 1 crit Microsoft AspNetCore Comp
  • Bing 地图 - 悬停时突出显示带有多边形的国家/地区

    我正在使用 silverlight Bing 地图控件 我想在用鼠标光标悬停它后突出显示国家 大陆 除了提供多边形坐标之外 还有更好的方法吗 如果我想强调世界上所有国家 那就太费功夫了 我认为应该有某种现成的解决方案 但我找不到 不 除了提
  • 在 Python 中使用自定义字体将 SVG 转换为 PNG

    我正在使用基于 Cairo RSVG 的解决方案将 SVG 光栅化为 PNG StackOverflow 上已经对它进行了描述在 Python 中将 SVG 转换为 PNG https stackoverflow com questions
  • 返回总和的 Lisp 函数

    我正在尝试编写一个奇怪的函数 所以请耐心等待 这个函数应该有一个列表L作为参数并有一个sum多变的 如果L不是列表 它应该返回nil 否则 它应该迭代列表的每个元素并执行以下操作 如果元素是数字且小于零 则应从总和中减去 1 如果元素是数字
  • 时间序列 - 相关性和滞后时间

    我正在研究一组输入变量和响应变量价格之间的相关性 这些都是按时间顺序排列的 1 我是否有必要平滑曲线其中输入变量是循环变量 自回归 如果是这样 怎么办 2 一旦建立相关性 我想准确量化输入变量如何影响响 应变量 例如 一旦 X 增加 gt
  • 缩放、旋转和裁剪图像

    我希望在 GUI 中能够永久缩放 旋转和裁剪图像 将更改保存到文件中 WPF本身就有能力吗 如果不是 是否有任何组件可以与 WPF 更好地集成 我还需要调整 JPEG 和 TIFF 格式的图像亮度和对比度 删除边框 Thisarticle
  • 为什么 Common Lisp 中冒号位于变量之前

    Common Lisp 中变量前面的冒号语法是什么意思 我见过这样的程序 我将在这里从大量函数中展示一些示例代码 defun expand successorf node mapcar lambda action state cost le
  • 重载类的流插入 (<<) 运算符

    它经常作为类的友元函数被重载 有什么方法可以将其重载为成员函数吗 有什么方法可以将其重载为成员函数吗 假设你有课Foo并且您想使用 Foo foo std cout lt lt foo 不 它不能 仅当第一个参数是类的对象时 成员函数重载才
  • 将 YouTube 嵌入代码精简为仅 URL

    请帮忙 我需要删除以下代码 以便它只使用 值 部分
  • 删除 ASP.net MVC 单页应用程序中的身份验证

    我正在尝试在 Visual Studio 2013 中使用 asp net MVC SPA 模板 我不需要任何身份验证位 我只需要直接加载到控制器页面之一 如何删除初始模板中的所有身份验证内容 去除 Authorize 注释来自HomeCo
  • 创建一个触发器,它将在另一个表更新时在表中插入记录

    假设我有表 T1 和 T2 Columns of T1 gt Value Columns of T2 gt OldValue NewValue 我需要的是一个触发器 它将在 T1 更新时在 T2 中插入一条记录 我还需要知道旧值和新值 我以