前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql server触发器实现插入时操作另一张表

sql server触发器实现插入时操作另一张表

作者头像
逝兮诚
发布2019-10-30 12:07:05
1.3K0
发布2019-10-30 12:07:05
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/51347050

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的

1.定义变量

代码语言:javascript
复制
#在mysql中变量直接这么定义就可以了
SET @VALUE = "111";

#在sql server中
declare @count int;
#并赋值
set @count =0;
#如果是查询,必须这么些
select @count = count(*) from WQ_MNINF_D_REAL where STCD=@stcd;

2.判断

在mysql中,if判断的格式 if 条件 then 语句 end if;

而在sql server中,if判断的格式

if(条件) begin 语句 end;

例子

代码语言:javascript
复制
#mysql
IF @VALUE4=1 THEN
   INSERT INTO t_sca_history_data (METER_CODE,PARAM_CODE,DATA_VALUE,V_VALUE,DATE_TIME) VALUES
                        (NEW.METER_CODE,NEW.PARAM_CODE,NEW.DATA_VALUE,NEW.V_VALUE,NEW.DATE_TIME);
END IF;

sql server
if(@count=0)
begin
   insert into WQ_MNINF_D_REAL select STCD,TYPE,UPPERVALUE,LOWERVALUE,TM,NT,@smid,@stnm,@prjcd,@pipcd from inserted;
end 

3.触发器的new

在mysql中,用new.NAME 可以得到触发器触发插入的值,而sql server不是这样的,sql server是把处罚的数据放在一个临时表中,所以它的操作是这样的

代码语言:javascript
复制
#inserted代表插入数据的那张临时表,同时还有deleted 这张用作删除数据的临时表
select STCD from inserted
#若只是把插入的数据插入另一张表,语句如下
insert into WQ_WWFINF_D_REAL select PRJCD,TM,INFL,SWWL,CWWL,OTPS,OTF,QOEC,PSPPS,NT FROM inserted;
#如果还有加点别的数据,可以这么做
insert into WQ_MNINF_D_REAL select STCD,TYPE,UPPERVALUE,LOWERVALUE,TM,NT,@smid,@stnm,@prjcd,@pipcd from inserted;

4.我做的触发器的代码,改触发器的作用是把原始数据表的数据插入到实时数据表中,如果实时表没有该数据,就插入,如果有,就删除再插入

代码语言:javascript
复制
BEGIN
  declare @stcd varchar(30);
  declare @count int;
  declare @smid int;
  declare @stnm varchar(30);
  declare @prjcd varchar(30);
  declare @pipcd varchar(30);
  select @stcd = STCD from inserted;
  select @count = count(*) from WQ_MNINF_D_REAL where STCD=@stcd;
  select @smid = SMID from WQ_WQSINF_B where STCD=@stcd;
  select @stnm = STNM from WQ_WQSINF_B where STCD=@stcd;
  select @prjcd = PRJCD from WQ_WQSINF_B where STCD=@stcd;
  select @pipcd = PIPCD from WQ_WQSINF_B where STCD=@stcd;
  if(@count=0)
    begin
      insert into WQ_MNINF_D_REAL select STCD,TYPE,UPPERVALUE,LOWERVALUE,TM,NT,@smid,@stnm,@prjcd,@pipcd from inserted;
    end 
  else
    begin
      delete WQ_MNINF_D_REAL where STCD=@stcd;
      insert into WQ_MNINF_D_REAL select STCD,TYPE,UPPERVALUE,LOWERVALUE,TM,NT,@smid,@stnm,@prjcd,@pipcd from inserted;
    end
END

这篇博文给我作用挺大的,一并贴出

http://blog.csdn.net/chenbin520/article/details/6026686

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档