2010-10-19 51 views
0

我需要更新记录状态(字段名称IsActivate - 它保存记录的状态),但需要首先检查数据是否在另一个表中使用(意思是表具有关系与另一个表)。如果我想要更新的数据在另一个表中使用,则不允许更新,否则应更新它。如何使用MS SQL 2005创建触发器以实现此方法?或者,可以使用MS SQL 2005实现此方法SP?怎么样?如何在MS SQL 2005中创建触发器

+0

你有什么困难?你不知道创建触发器的语法?你不知道如何编写select语句?请更具体一些。你到目前为止尝试过什么? – 2010-10-19 08:26:36

+0

我想他是问他是否可以在触发器中测试另一张桌子。是的,你可以使用几乎任何SQL。 – Rup 2010-10-19 08:28:11

+0

是的,这是我第一次创造TRIGGER,任何人都可以帮助我,我该如何实现我想做的事情? – user335160 2010-10-19 08:35:23

回答

2

如果我是你,我会避免使用触发器。你可以在SP中轻松做到这一点。

您的更新记录应该做这样的事情SP: -

  • 我假设你要检查的值传递的参数如更新SP,可能@value
  • 使用@valueSELECT statment在类似SELECT @result = count(1) FROM tableToCheck WHERE columnToCheck = @value
  • 如果@result = 0,继续前进,火现有UPDATE声明
  • 如果@resul吨<> 0,做任何你需要在你的业务场景做这样也许更新的输出参数,以表明您更新失败

如果你想知道上述逻辑的语法,你可以看看如果您使用的是SQL Server,则使用MSDN;如果使用的是MySQL,则使用MySQL docs;如果使用的是Oracle,则使用Oracle help。如果任何其他引擎,只是谷歌“CREATE PROCEDURE <engineName>

然后,如果您有任何具体的语法问题,请随时张贴他们在这里与您的代码,我们将很乐意帮助你与他们!

+0

嗨InSane,如果在触发器中使用它,有什么缺点,只是好奇...... :) – user335160 2010-10-19 08:41:12

+0

@ user335160 - 调试触发器通常是一个很大的痛苦,因为触发器的固有特性...他们几乎总是最后一个人看起来和大多数人忘记他们!对我而言,从长远来看,可能是他们最大的缺点 – InSane 2010-10-19 08:44:28

+0

但是表现如何?它比SP慢得多?顺便说一句,表格与5张表格有关系,所以我必须创建给定语句5次来检查值是否存在? – user335160 2010-10-19 08:50:13