1. 程式人生 > >sql server觸發器實現插入時操作另一張表

sql server觸發器實現插入時操作另一張表

以前都是也得mysql,現在寫sqlserver的觸發器,感覺改動還是蠻大的

1.定義變數

#在mysql中變數直接這麼定義就可以了
SET @VALUE = "111";

#在sql server中
declare @count int;
#並賦值
set @count =0;
#如果是查詢,必須這麼些
select @count = count(*) from WQ_MNINF_D_REAL where [email protected];

2.判斷

在mysql中,if判斷的格式
if 條件 then 語句 end if;

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

if(條件) begin 語句 end;

例子

#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是把處罰的資料放在一個臨時表中,所以它的操作是這樣的

#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.我做的觸發器的程式碼,改觸發器的作用是把原始資料表的資料插入到實時資料表中,如果實時表沒有該資料,就插入,如果有,就刪除再插入

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 [email protected];
  select @smid = SMID from WQ_WQSINF_B where [email protected];
  select @stnm = STNM from WQ_WQSINF_B where [email protected];
  select @prjcd = PRJCD from WQ_WQSINF_B where [email protected];
  select @pipcd = PIPCD from WQ_WQSINF_B where [email protected];
  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 [email protected];
      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

相關推薦

sql server觸發器實現插入操作

以前都是也得mysql,現在寫sqlserver的觸發器,感覺改動還是蠻大的 1.定義變數 #在mysql中變數直接這麼定義就可以了 SET @VALUE = "111"; #在sql server中 declare @count int; #並賦值 set @count

SQL server觸發器、儲存過程操作遠端資料庫插入資料,解決伺服器已存在的問題

最近弄了一個小專案,也不是很複雜,需要將一個數據庫的一些資料備份到另外一個庫,不是本地,可能是網路上其他的資料庫,想了一下,用了儲存過程和觸發器。也不是很複雜,首先我需要操作遠端資料庫,於是寫了一個儲存過程: CREATE PROCEDURE sendInfoToRemo

mysql 如何用SQL表裡的資料插入 4個例子

1. 表結構完全一樣 insert into 表1 select * from 表2  2. 表結構不一樣(這種情況下得指定列名) insert into 表1 (列名1,列名2,列名3) select 列1,列2,列3 from 表2 3、

sql 如何把一個的查詢結果插入中(兩個的結構不同)

 -- 如何把一個表的查詢結果插入到另一張表中(兩個表的結構不同), 插入的欄位個數和查詢的欄位個數必須一致 insert into 表名(欄位1,欄位2,欄位3...) select 欄位1,欄位2,欄位3.. from 查詢表名 where .. insert into A(id,

sql server 複製中的資料到

insert into userstate(NUSERID,USERCODE,CREATETIME,USERSTATE,ACCOUNTSTATE,UPDATETIME,UPDATEPASSWORD) select NUSERID,USERCODE,'2018/12/13',1,0,'2018/12

sql insert into 一次性插入多條資料 從中查詢到的資料插入

--插入多條資料使用DEFAULT關鍵字(第二種方法,不要將預設列名寫出,在UNION後面加上all,最後一行不加) ------------------------------------------------------------------------------

sql語句將中的某插入

如下兩張表student和course               現在想要將course表的cname列插入到student表中。(有兩種方法) 方法一: 語句如下: alter table stu

Sql Server儲存過程從一個中抓取資料填充到

  set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author:  <alex,,Name> -- Create

PL\SQL如何將從中選出的資料插入

 今天在做資料庫操作的時候,有一個需求是將A表中的前500000條資料查出來,然後插入到表B中.表A與表B具有同樣的欄位型別,資料庫為Oracle 10g,資料庫管理工具用的PL\SQL,由於資料庫不是特別的熟,於是在網上查到如下語法: insert into B se

SQL Update 觸發器 當本條記錄某個欄位更新後,用該記錄去更新的資料

思路來源於該部落格 --SqlServer Update觸發器判斷某個欄位的值是否已經更改 https://blog.csdn.net/zhangshufei8001/article/details/51568834 create trigger [tig_update

oracle 觸發器 刪除中的內容插入

CREATE OR REPLACE TRIGGER AR_DETAIL_DELETE BEFORE DELETE ON AR_DETAIL REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW

SQL Server 觸發器中 Update的方法 判斷列是否更新

Every one know `s that : 觸發器中我可能會因為某一個欄位的值被修改了,我才會觸發這個Trigger,ok,我們會寫   if  Update(Column1) 這樣的語句,ok,沒問題,但你要清楚,這個判斷是基於你的SQL 語句,也就是說,你資料庫

SQL Server大資料匯入匯出:將的資料匯入到

         今天下午休息的時候又被扔給一項任務:把全國的街道資料匯入街道表。但是他們扔給我的SQL指令碼是從網上down的一個,跟平臺這邊的資料庫設計的完全不一樣。            

postgresql 從中查詢出記錄然後批量插入

 有個業務從 appuser 表中 把uid 查出來所有uid 資料,然後批量插入 app_user_sdk 表中 insert into app_user_sdk ((select uid,'MY' from appuser);  又要重複插入,又把新新增的使用者,

mysql資料庫的簡單增刪改查,合併欄位,拼接字元操作,用java完成將中的查詢結果合併存入的指定欄位

首先問題描述:我現在有兩個表,一個表是關鍵詞,一個表是含有關鍵詞的標籤,需要做的就是在關鍵詞表中新建一個標籤欄位,把包含該關鍵詞的全部標籤存入其中。比如關鍵詞是Java,標籤可能有Java開發,Java後臺等。我這裡關鍵詞有4000個,標籤有40000個,我用了小段java程式碼+sql的函式就完成

Hive中三資料合併成一行,並插入

知識點:時間戳轉化,當前時間,左連線,查詢的欄位相同可以直接插入另一張表  insert into lqioc_ioc_dw.kkjc select a.*,b.CLL,e.JZT from (select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy

如何實現一個表字段資料變化,中資料隨著變化

資料表1(db_integrityevent): 資料表2:(db_corporatecreditscore): navicat觸發器寫法: 可以實現表中相關資料變化,表中其他跟隨這變化。 mysql命令列寫法: delimiter $$ for each row B

怎麼把中某幾列資料插入中mysql

兩種方法: 1.表之間的關聯; 2.java程式; 我們這裡主要講的是第二種方法: 第二種方法的優勢在於,如果想要把a表中的資料某幾列資料插入b表中,無需b表中的某列=a表中某列,即使b表中什麼資料都沒有; 那就是mysql語句的增刪改查,比任何操作都簡單,都迅

mysql把一個某個欄位的內容複製到的某個欄位的SQL語句寫法

需求:把一個表某個欄位內容複製到另一張表的某個欄位。 實現sql語句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.

mysql 從查資料並插入

INSERT INTO  table1 (table1_field1,table1_field2,...) select table2_filed1,table2_field2,... from table2 where condition1 and condition2