【问题标题】:T-SQL how to modify the value before insertT-SQL如何在插入前修改值
【发布时间】:2012-05-12 17:45:19
【问题描述】:

我发现sql server 中只有after 而不是triggers。并且修改插入的 pesudo 表中的值是非法的。然后我的问题出现了:如果我想检查将要插入到我的表中的数据,并且当数据违反我的约束时,我应该将这些值修改为默认值,该怎么做?插入后如何更新值?但是,如果我的表中没有唯一的主键或列,我如何找到刚刚插入的行然后更新它?

【问题讨论】:

  • INSTEAD OF 触发器的要点是您可以“捕获”该操作(例如INSERT),然后执行一些操作而不是该正常操作。所以你可以读出这些值,修改它们,然后在你的INSTEAD OF INSERT触发器中调用一个INSERT来插入修改后的数据
  • 这样做的问题是,如果表结构发生变化,您还需要考虑修改触发器。相反,Oracle 允许您更新更符合逻辑的“插入”对象(“新”)的等效项。

标签: sql-server-2008 tsql


【解决方案1】:

基本上,使用INSTEAD OF INSERT 触发器,您可以实现您要查找的内容——只需从INSERTED 伪表中读出数据,对其进行修改,然后将其插入到表中

所以你的触发器看起来像这样:

CREATE TRIGGER YourTrigger ON dbo.YourTable    
INSTEAD OF INSERT
AS
    SET NOCOUNT ON

    -- do the INSERT based on the INSERTED pseudo table, modify data as needed
    INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN)
      SELECT 
          Col1, 2 * Col2, ....., N * ColN
      FROM 
          INSERTED

当然,您也可以添加例如以WHERE 子句的形式检查SELECT .... FROM INSERTED 语句,例如忽略某些行 - 可能性无穷无尽!

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多