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