注册 登录
编程论坛 SQL Server论坛

sql用select查询语句更新另一个表的数据怎么弄,大神帮帮忙

yuye11 发布于 2017-07-06 10:15, 1997 次点击
SELECT t_d_SwipeRecord.f_RecID AS '序号',
              t_d_SwipeRecord.f_CardNO AS '卡号',  
              t_b_Consumer.f_ConsumerNO AS '工号',
              t_b_Consumer.f_ConsumerName AS '姓名',
              t_b_Group.f_GroupName AS '部门',
              t_d_SwipeRecord.f_ReadDate AS '时间',
              t_b_Reader.f_ReaderName  AS '地点',
   CASE WHEN t_d_SwipeRecord.f_Character =1 THEN '允许通过' ELSE '禁止通过' END  AS '通过',
   CASE WHEN t_d_SwipeRecord.f_InOut=0 THEN '出门' ELSE '进门' END  AS '进出',
             t_b_Door.f_DoorName  AS '门名称',
             t_d_SwipeRecord.f_RecordAll AS '单个记录的原始数据'
       FROM (((t_d_SwipeRecord INNER JOIN t_b_Consumer ON ( t_b_Consumer.f_ConsumerID = t_d_SwipeRecord.f_ConsumerID))  
                LEFT JOIN   t_b_Reader on ( t_b_Reader.f_ReaderID = t_d_SwipeRecord.f_ReaderID) )  
                LEFT JOIN t_b_Group ON (t_b_Consumer.f_GroupID = t_b_Group.f_GroupID  ))
                LEFT JOIN t_b_Door ON (t_b_Door.f_ControllerID = t_b_Reader.f_ControllerID
                and ((f_ControllerSN>400000000 and t_b_Door.f_DoorNO = t_b_Reader.f_ReaderNO)
                or (f_ControllerSN<400000000 and (((t_b_Door.f_DoorNO*2) = t_b_Reader.f_ReaderNO) or ((t_b_Door.f_DoorNO*2-1) = t_b_Reader.f_ReaderNO))))
                  )
        WHERE ( ((((f_RecOption - (f_RecOption % 2)) / 2) % 2) =0))
我通过数据库导入数据的方法通过上面的查询语句新建了一个表sjcx,但是表t_d_SwipeRecord的数据更新的时候表sjcx的数据不会发生变化,怎么样让表sjcx在表t_d_SwipeRecord更新的时候自动运行上面那段语句实现同步更新
只有本站会员才能查看附件,请 登录
2 回复
#2
mywisdom882017-07-06 12:57


-- 怎么样让表sjcx在表t_d_SwipeRecord更新的时候自动运行上面那段语句实现同步更新
-- 在t_d_SwipeRecord上建立1个触发器,t_d_SwipeRecord_tr

-- 1.插入操作(Insert)
-- Inserted表有数据,Deleted表无数据

-- 2.删除操作(Delete)
-- Inserted表无数据,Deleted表有数据

-- 3.更新操作(Update)
-- Inserted表有数据(新数据),Deleted表有数据(旧数据)



create trigger [dbo].[t_d_SwipeRecord_tr]
on [dbo].[t_d_SwipeRecord]
for update
as
begin
-- 你要同步的语句在这里写
-- 用到的数据,你可以从“Inserted,Deleted”这2个表中得到


end
#3
mywisdom882017-07-06 13:11
-- 套用上面的格式,表 A1(id int,name varchar(10),age int),表 A2(id int ,name varchar(10),addr varchar(60))
-- 要求在更新表A1的 name字段时,同步更新 A2的name字段
create trigger [dbo].[a1_tr] -- a1_tr 是触发器的名称,命名时,一般在表名的前面或者后面加上"tr"
on [dbo].[a1]
for update
as
begin
  if update(name) --如果更新 name 字段,才更新A2
  begin
    -- Inserted表有数据(新数据),Deleted表有数据(旧数据)
    update a2 set a.name=i.name from a2 as a, Inserted as i,Deleted as d
    where a.id=d.id and i.id=a.id
  end
end



[此贴子已经被作者于2017-7-6 13:12编辑过]

1