成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL語句操作主從關系表

數據庫 SQL Server
在項目開發中,經常出現這樣的需求.在新增或修改一個主表數據時,對應的從表也要進行同步,此時我們是怎么操作的呢?

在項目開發中,經常出現這樣的需求.在新增或修改一個主表數據時,對應的從表也要進行同步,此時我們是怎么操作的了?典型的方法就是對于主表的各數據字段進行更新或新增,對于從表一般都會先刪除相關的所有記錄,然后再進行插入。也就是說每次保存時,從表的數據都要重新執行一遍刪除再插入的過程。這是一個不錯的方法,在使用數據庫事務后,不會存在刪除后又沒有插入導致數據不一致的情況。

ok,原理是這樣,那么到實際的操作中,大家如何操作的呢?有人通過在程序中,通過多次數據庫操作完成如上的要求,這種方法可能存在這數據的不一致性,因為無法保證在兩個數據語句操作之間出現意外。那么我們就合并到一個存儲過程中去完成吧,復雜的參數和接收后處理,讓這個存儲過程變的困難。下邊我就結合實際應用說說此過程吧。應用場景,在學生管理中,添加一條學生記錄,對應的要 添加學生對應的課程。即每次更新和新增學生記錄,對應其課程也要跟著變化。

那么這個過程,就符合上邊的邏輯。

通用的參數傳遞,在此不再詳說,重點講解,科目信息傳遞過后怎么處理。假設從表Tb_StudentSubject 存在StudentId,SubjectId兩個字段。那么代碼如下:

  1. Create proc  SaveInfo  
  2. (  
  3.  ---參數列表不再逐一書寫  
  4.   @subjectList varchar(400))  
  5. as 
  6. begin tran  
  7. --新增或修改主表 省略  
  8. DECLARE @subjectID int,  
  9.         @subjectIDsLen int,--科目長度  
  10.         @subjectIDLen int,--單個科目長度  
  11.         @nStart    INT    ,    -- 記錄查找的起始位置  
  12.         @nLast    INT    -- 記錄‘,’的位置  
  13.     select @subjectIDsLen=len(@SubjectIDs),@nStart=1,@nLast=0  
  14.     DELETE Tb_StudentSubject WHERE StudentId=@sId  --刪除相關的全部記錄  
  15.     IF(@subjectIDsLen>0)  
  16.     BEGIN 
  17.         while(@nStart<@subjectIDsLen)  
  18.         BEGIN 
  19.             set @nLast=charindex(',',@SubjectIDs,@nStart)--從第@nStart個位置開始記錄逗號的位置  
  20.             set @subjectIDLen=@nLast-@nStart  --記錄每個subjectID的長度  
  21.             set @subjectID=substring(@SubjectIDs,@nStart,@subjectIDLen)--獲取一個subjectID  
  22.             Insert Into Tb_StudentSubject(StudentId,SubjectID)values(@sId,@subjectID)  
  23.             set @nStart=@nLast+1--設置下次查找的起始位置  
  24.         END 
  25.     END 
  26. if @@Error=0  
  27.     commit transaction 
  28. else 
  29.     rollback transaction 
  30. End 

在這邊代碼中,科目列表通過“,”進行分割,上邊的存儲過程帶注釋,重點說明兩個系統自帶的函數

CHARINDEX ( expression1 ,expression2 [ , start_location ] )

expression1 :其中包含要查找的字符的序列

expression2 :通常是一個為指定序列搜索的列

start_location :開始在 expression2 中搜索 expression1 時的字符位置。如果 start_location 未被指定、是一個負數或零

另一個函數就是:SUBSTRING ( expression ,start , length )從指定的數據源串中從指定位置截取指定長度的串

其中 expression :是字符串、二進制字符串,要操作的數據源串

start:要截取的開始位置,注意此方法和C#自帶的位置不一樣,數據庫中strat從1開始,程序中從0開始

length:截取內容的長度

另外一個就len(expres) 這個就比較簡單了,獲取指定字符的長度

通過以上代碼,就可以實現一個完整存儲過程實現主從表數據的處理了,在數據一致性和操作便捷性得到保證,而且相同通用。

注:在涉及類似主從關系表中,建議不要在從表中設置自動編號的主鍵,因為頻繁的刪除和添加,導致主鍵不斷的累增,而且毫無使用此主鍵的意義。

以上內容是個人見解,希望大家多交流相應的方法。

原文鏈接:http://www.cnblogs.com/Wendy_Yu/archive/2011/06/01/2067319.html

【編者推薦】

  1. 思科推新數據中心解決方案支持SQL Server
  2. 數據庫日常維護常用的腳本部分收錄
  3. 云端數據庫:微軟SQL Azure及其應用場景
  4. SQL點滴之收集SQL Server線程等待信息
  5. 養成一個SQL好習慣帶來一筆大財富

 

責任編輯:艾婧 來源: Wendy 's博客
相關推薦

2010-09-17 16:03:17

鎖定SQL表

2010-09-26 15:23:24

SQL語句

2023-11-15 20:24:54

數據庫SQLGo語言

2011-08-24 09:53:46

Windows Ser

2010-09-28 15:07:14

SQL語句

2011-01-06 09:28:19

SQL語句

2010-09-07 14:36:24

SQL語句

2010-07-05 12:40:56

SQL Server

2010-11-12 14:10:15

SQL遍歷父子關系表

2010-09-25 16:42:45

sql語句

2011-03-10 16:02:41

2010-09-02 09:51:24

SQL刪除

2010-09-27 10:04:30

Sql Update語

2010-04-19 13:50:27

Oracle調整

2013-11-25 10:48:33

2012-05-10 11:25:34

LINQ

2010-09-07 11:04:14

SQL語句

2021-03-12 18:56:26

大數據數據開發SQL

2010-09-25 15:37:38

SQL語句

2010-09-01 11:46:01

DB2臨時表SQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一级 | 亚洲一区二区免费 | 日本不卡一区二区三区 | 欧美一级视频在线观看 | 国产av毛片 | 久草视频在| 操久久| 能看的av| 亚洲成年影院 | 一区二区三区精品 | 国产欧美一区二区三区国产幕精品 | 免费在线观看一区二区三区 | 午夜国产精品视频 | 亚洲欧美日韩久久久 | 欧美一区二区三区视频在线播放 | 中文字幕二区三区 | 午夜视频在线观看网站 | 成人激情视频在线观看 | 国产高清视频在线观看 | 亚洲欧洲一区二区 | 91一区二区三区 | 欧美一区不卡 | 久久久久久国产 | 日韩欧美三级电影在线观看 | 亚州国产 | 国产一区二区三区欧美 | 免费视频一区二区三区在线观看 | 久久首页 | 日韩欧美三区 | 黑人巨大精品欧美一区二区免费 | 久久亚洲综合 | 久久久久久久国产 | 亚洲视频在线一区 | 国产精品日韩高清伦字幕搜索 | 中文在线观看视频 | 精品国产1区2区3区 一区二区手机在线 | 三级国产三级在线 | 日韩图区 | 中文字幕在线观看 | 国产一区二区三区在线 | 日韩电影免费在线观看中文字幕 |