【问题标题】:Create a trigger from select statement从 select 语句创建触发器
【发布时间】:2016-02-25 09:43:41
【问题描述】:

我正在尝试创建一个触发器,当数据库中有更新/插入时,将创建/更新列中的数据。我有一个名为topic 的列,它应该填充来自其他列的值。我可以使用select 语句填充topic 列,但我不确定触发器中的语法如何获得相同的结果。

这是我的SELECT 声明:

select 
    name, city, topic, 
    name + ' - ' + city + ' - '+ 
       CASE 
          WHEN new_car = 'yes' THEN 'Car,' ELSE '' 
       END + 
       CASE 
          WHEN new_bus = 'yes' THEN 'TBus,' ELSE '' 
       END + 
       CASE 
          WHEN new_bike = 'yes' THEN 'Bike,'ELSE '' 
       END + 
       CASE 
          WHEN new_train = 'yes' THEN 'Train,' ELSE '' 
       END + 
       CASE 
          WHEN new_truck = 'yes' THEN 'Truck,' ELSE '' 
       END + 
       CASE 
          WHEN new_boat = 'yes' THEN 'Boat,'ELSE '' 
       END + 
       CASE 
          WHEN new_walk = 'yes' THEN 'Walk,' ELSE '' 
       END + 
       CASE 
          WHEN new_motorbike = 'yes' THEN 'Motor Bike, ' ELSE ''
       END AS topic
from 
    dbo.myTableView

谢谢

编辑 1: 上面的SELECT 语句使用VIEW 进行查询,但实际查询的列来自不同的表。

表1(主题表):

name|topic|new_car|new_bus|new_bike|new_train|new_truck|new_boat|new_walk|new_motorbike 

表2(地址表):

street1|street2|street3|city|state|zipcode|country

【问题讨论】:

    标签: sql triggers sql-server-2012


    【解决方案1】:

    您需要在表上创建触发器以进行插入和更新操作:

    CREATE TRIGGER triggrName
    ON tableName AFTER INSERT, UPDATE 
    AS BEGIN
    
        UPDATE t SET topic =  
        name + ' - ' + city + ' - '+ 
           CASE 
              WHEN new_car = 'yes' THEN 'Car,' ELSE '' 
           END + 
           CASE 
              WHEN new_bus = 'yes' THEN 'TBus,' ELSE '' 
           END + 
           CASE 
              WHEN new_bike = 'yes' THEN 'Bike,'ELSE '' 
           END + 
           CASE 
              WHEN new_train = 'yes' THEN 'Train,' ELSE '' 
           END + 
           CASE 
              WHEN new_truck = 'yes' THEN 'Truck,' ELSE '' 
           END + 
           CASE 
              WHEN new_boat = 'yes' THEN 'Boat,'ELSE '' 
           END + 
           CASE 
              WHEN new_walk = 'yes' THEN 'Walk,' ELSE '' 
           END + 
           CASE 
              WHEN new_motorbike = 'yes' THEN 'Motor Bike, ' ELSE ''
           END    
        FROM tableName t
        JOIN INSERTED i ON t.ID = i.ID
    
    END
    

    【讨论】:

    • 我收到一条错误消息,提示“列名无效:城市”,city is in a different table ,我该如何参考?
    • 这座城市在哪里?加入那张不同的桌子。或者提供表格结构。我怎么能猜出从哪里去城市?
    • city 在另一个表中,所以连接可以获取列 city 的值吗?
    • 是的,你应该加入一个更新到另一个城市的表
    • 对不起,你是什么意思,城市在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2020-11-23
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多