好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 你真的了解觸發器么 數據實時同步更新問題剖析

你真的了解觸發器么 數據實時同步更新問題剖析

熱門標簽:慶陽地圖標注 浙江穩定外呼系統供應商 電銷外呼系統軟件功能 美團地圖標注商戶認證注冊 北京400電話辦理多少錢 榕城市地圖標注 咸陽電腦外呼系統運營商 承德地圖標注公司名需要花錢嗎 怎么給高德做地圖標注
當我們想更新一張動態表的時候(即:表中的數據不斷的添加),也許我們會用數據庫代理,通過寫作業,然后讓他定時查詢動態表中最新添加的數據,然后更新數據。這樣時能實現更新數據的要求,但是數據卻不能實時同步更新。

這個時候,觸發器就是我們想要的神器了。我們可以在那張動態表上新建觸發器。觸發器的實質就是個存儲過程,只不過他調用的時間是根據所建的動態表發生該表而執行(即:Insert新數據,Update或者Delete數據)。

具體怎么使用觸發器,今天我這里就不介紹了,園子里資料多的很。那么我今天要介紹的是什么呢?
前幾天在寫sql代碼的時候無意間發現了這么個問題:就是我一直以為每當動態表中插入一條數據,觸發器就執行一次,但是我這樣理解的話,當批量插入數據的時候,觸發器執行的次數和插入的行數相同,但是事實不是這樣。乘著今天有點時間,就想寫出來和大家分享下,講的不對請大家斧正!

下面,我就寫了個簡單的例子供大家參考。
復制代碼 代碼如下:

--我們要建觸發器的動態表
Create table Table_a
(
ID int identity(1,1),--自增ID
Content nvarchar(50),
UpdateIDForTrigger int
)

然后我們在該表上創建一個觸發器
復制代碼 代碼如下:

Create TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
declare @ID int
set @ID=(select ID from inserted)
--更新Table_a表中的UpdateIDForTrigger字段的值,為了能更明顯的看出實時執行的效果
UPDATE Table_a
SET UpdateIDForTrigger = (@ID+10)--為了能看出不同,就直接將比ID大10的值作為變量賦值
WHERE ID = @ID;
END

接下來,我們按照普通一條條的插入結果測試下:
復制代碼 代碼如下:

--給信息表添加數據
insert into Table_a(Content) values('信息一');
insert into Table_a(Content) values('信息二');

然后查詢下現在動態表中的數據情況
復制代碼 代碼如下:

select * from Table_a

查詢結果如圖:
 
我們可以看到觸發器執行了。在每條數據插入的時候觸發器同時執行了Update功能。
然后,我們要批量插入數據,為了方便我們插入,我們這里建立一張臨時的基本信息表:
復制代碼 代碼如下:

--基本信息表
Create table Table_Info
(
ID int identity(1,1),
Content nvarchar(50)
)

然后插入數據
復制代碼 代碼如下:

insert into Table_Info(Content) values('信息三');
insert into Table_Info(Content) values('信息四');
insert into Table_Info(Content) values('信息五');
insert into Table_Info(Content) values('信息六');
insert into Table_Info(Content) values('信息七');
insert into Table_Info(Content) values('信息八');
insert into Table_Info(Content) values('信息九');
insert into Table_Info(Content) values('信息十');

然后我們就可以批量插入數據到動態表中了
復制代碼 代碼如下:

insert into Table_a(Content)
select Content from Table_Info

這次重點來了,我們在執行這個sql語句的時候消息框中會出現錯誤提示:
 
有經驗的朋友會知道,這個錯誤是由于多個結果用“=”賦值給一個變量導致的。
即:set @變量=(select 多行結果 from Table)
這個時候,我就疑惑了,問題出在哪里了呢?不是觸發器在每插一條數據的時候執行一次么?
于是,我將觸發器改了下:
復制代碼 代碼如下:

Alter TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
select ID from inserted;
END

然后再執行上面的批量插入試試看,看看他inserted表中到底存的是什么值:
果然不出所料,inserted表中的結果并不是一條數據:

知道錯誤的原因,我們操作起來就簡單了,我們可以給inserted表建游標,然后通過游標來對批量插入的每行數據進行編輯。下面是我們修改后的觸發器代碼:
復制代碼 代碼如下:

Alter TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
declare @ID int
declare cur_Insert cursor
for
select ID from inserted
open cur_Insert
fetch next from cur_Insert into @ID
while @@fetch_status=0
begin
UPDATE Table_a
SET UpdateIDForTrigger = (@ID+10)--為了能看出不同,就直接將比ID大10的值作為變量賦值
WHERE ID = @ID;
fetch next from cur_Insert into @ID
end
close cur_Insert
deallocate cur_Insert
END

然后,我們再按照上面的批量插入數據,然后查詢下動態表中的結果:
復制代碼 代碼如下:

insert into Table_a(Content)
select Content from Table_Info;
select * from Table_a;

此時運行沒有錯誤提示了,運行結果如下:

 
這樣,批量插入插入數據時觸發器也能用了。
然后結合了幾位前輩的建議,再改了下觸發器的代碼。將上面的游標改成了下面的方式:

復制代碼 代碼如下:

Alter TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
UPDATE Table_a
SET UpdateIDForTrigger =inserted.ID+10
FROM inserted
Where Table_a.ID=inserted.ID
END

然后再批量插入了幾行數據,結果也是可以的。所以學無止境啊!!
 
總結下:觸發器運行是每次執行一次Insert操作或者是Update,Delete等操作的時候才執行的。它的對象不是針對于修改的行數(即:每行修改的時候執行)。

您可能感興趣的文章:
  • SQL SERVER 觸發器介紹
  • Sql Server觸發器的使用
  • MySQL觸發器學習總結
  • SQL觸發器實例講解
  • SQLServer2005觸發器提示其他會話正在使用事務的上下文的解決方法

標簽:拉薩 江蘇 新鄉 上海 昭通 貴州 重慶 呼和浩特

巨人網絡通訊聲明:本文標題《你真的了解觸發器么 數據實時同步更新問題剖析》,本文關鍵詞  你,真的,了解,觸發器,么,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《你真的了解觸發器么 數據實時同步更新問題剖析》相關的同類信息!
  • 本頁收集關于你真的了解觸發器么 數據實時同步更新問題剖析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 久久春色| 偷拍美女A??V福利视频| 带着乳夹上课| 伊人色图| gv白受咬床单哭国产gv| 无码免费一区二区三区蜜桃| 果冻传媒麻豆系列视频免费播放| 男人用jj捅女人的jj30分钟| 九九精品免视看国产成人| 精品国产91久久久久久无码七p | 无套内谢少妇毛片A片樱花| 人人干人人爱| 乱Lun之荡sao校园文H| 美女扒开胸罩露出奶| 周梦莹小说全本无删| japanese日本xnnx| 儿子操老妈| 狠狠色狠狠色综合久久第一次| 曰本一级毛片| 性教育片巜真人示范免费播放| 91丨人妻丨偷拍| 胸吻戏床戏视频| 久久久久精品免费视频| 欧美精品电影一区二区| 欧日韩高清aV在线| 波多野结衣系列073| md豆传媒app网址| 啊用力啊好深啊小黄文| 无图 亚洲 欧美 偷拍水中色| 国产精品久久天天影视| 百合肉高h喷汁呻吟futa| 毛片在线视频在线播放| 多强被?c到爽??H漫画| k频道国产欧美日韩精品二区| 506070老熟肥妇bbwxx视频| 欧美一卡二卡3卡4卡无卡六卡七卡科普| s货叫大声点c懒烂你的sb| 再深点灬舒服灬太大了添小书| 欧洲一级鲁丝片免费| 亚洲1页| 老头把舌头伸进她腿间花缝的第5季|