婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > sqlserver中操作主從關(guān)系表的sql語句

sqlserver中操作主從關(guān)系表的sql語句

熱門標(biāo)簽:al智能電話機(jī)器人 最新人工智能電銷機(jī)器人 如何做地圖標(biāo)注圖鋪 沒聽見電話機(jī)器人幫你接 銀川高頻外呼回?fù)芟到y(tǒng)多少錢 成都電話外呼系統(tǒng)一般多少錢 陜西電銷外呼系統(tǒng)好用嗎 蘭州語音外呼系統(tǒng)運(yùn)營(yíng)商 數(shù)字匠心電銷機(jī)器人
典型的方法就是對(duì)于主表的各數(shù)據(jù)字段進(jìn)行更新或新增,對(duì)于從表一般都會(huì)先刪除相關(guān)的所有記錄,然后再進(jìn)行插入。也就是說每次保存時(shí),從表的數(shù)據(jù)都要重新執(zhí)行一遍刪除再插入的過程。這是一個(gè)不錯(cuò)的方法,在使用數(shù)據(jù)庫(kù)事務(wù)后,不會(huì)存在刪除后又沒有插入導(dǎo)致數(shù)據(jù)不一致的情況。
ok,原理是這樣,那么到實(shí)際的操作中,大家如何操作的呢?有人通過在程序中,通過多次數(shù)據(jù)庫(kù)操作完成如上的要求,這種方法可能存在這數(shù)據(jù)的不一致性,因?yàn)闊o法保證在兩個(gè)數(shù)據(jù)語句操作之間出現(xiàn)意外。那么我們就合并到一個(gè)存儲(chǔ)過程中去完成吧,復(fù)雜的參數(shù)和接收后處理,讓這個(gè)存儲(chǔ)過程變的困難。下邊我就結(jié)合實(shí)際應(yīng)用說說此過程吧。應(yīng)用場(chǎng)景,在學(xué)生管理中,添加一條學(xué)生記錄,對(duì)應(yīng)的要 添加學(xué)生對(duì)應(yīng)的課程。即每次更新和新增學(xué)生記錄,對(duì)應(yīng)其課程也要跟著變化。
那么這個(gè)過程,就符合上邊的邏輯。
通用的參數(shù)傳遞,在此不再詳說,重點(diǎn)講解,科目信息傳遞過后怎么處理。假設(shè)從表Tb_StudentSubject 存在StudentId,SubjectId兩個(gè)字段。那么代碼如下:
復(fù)制代碼 代碼如下:

Create proc SaveInfo
(
---參數(shù)列表不再逐一書寫
@subjectList varchar(400))
as
begin tran
--新增或修改主表 省略
DECLARE @subjectID int,
@subjectIDsLen int,--科目長(zhǎng)度
@subjectIDLen int,--單個(gè)科目長(zhǎng)度
@nStart INT , -- 記錄查找的起始位置
@nLast INT -- 記錄‘,'的位置
select @subjectIDsLen=len(@SubjectIDs),@nStart=1,@nLast=0
DELETE Tb_StudentSubject WHERE StudentId=@sId --刪除相關(guān)的全部記錄
IF(@subjectIDsLen>0)
BEGIN
while(@nStart@subjectIDsLen)
BEGIN
set @nLast=charindex(',',@SubjectIDs,@nStart)--從第@nStart個(gè)位置開始記錄逗號(hào)的位置
set @subjectIDLen=@nLast-@nStart --記錄每個(gè)subjectID的長(zhǎng)度
set @subjectID=substring(@SubjectIDs,@nStart,@subjectIDLen)--獲取一個(gè)subjectID
Insert Into Tb_StudentSubject(StudentId,SubjectID)values(@sId,@subjectID)
set @nStart=@nLast+1--設(shè)置下次查找的起始位置
END
END
if @@Error=0
commit transaction
else
rollback transaction
End


在這邊代碼中,科目列表通過“,”進(jìn)行分割,上邊的存儲(chǔ)過程帶注釋,重點(diǎn)說明兩個(gè)系統(tǒng)自帶的函數(shù)
CHARINDEX ( expression1 ,expression2 [ , start_location ] )
expression1 :其中包含要查找的字符的序列
expression2 :通常是一個(gè)為指定序列搜索的列
start_location :開始在 expression2 中搜索 expression1 時(shí)的字符位置。如果 start_location 未被指定、是一個(gè)負(fù)數(shù)或零
另一個(gè)函數(shù)就是:SUBSTRING ( expression ,start , length )從指定的數(shù)據(jù)源串中從指定位置截取指定長(zhǎng)度的串
其中 expression :是字符串、二進(jìn)制字符串,要操作的數(shù)據(jù)源串
start:要截取的開始位置,注意此方法和C#自帶的位置不一樣,數(shù)據(jù)庫(kù)中strat從1開始,程序中從0開始
length:截取內(nèi)容的長(zhǎng)度
另外一個(gè)就len(expres) 這個(gè)就比較簡(jiǎn)單了,獲取指定字符的長(zhǎng)度
通過以上代碼,就可以實(shí)現(xiàn)一個(gè)完整存儲(chǔ)過程實(shí)現(xiàn)主從表數(shù)據(jù)的處理了,在數(shù)據(jù)一致性和操作便捷性得到保證,而且相同通用。
注:在涉及類似主從關(guān)系表中,建議不要在從表中設(shè)置自動(dòng)編號(hào)的主鍵,因?yàn)轭l繁的刪除和添加,導(dǎo)致主鍵不斷的累增,而且毫無使用此主鍵的意義。
以上內(nèi)容是個(gè)人見解,希望大家多交流相應(yīng)的方法。

標(biāo)簽:朔州 通化 宜春 邢臺(tái) 鹽城 巴彥淖爾 遼源 本溪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sqlserver中操作主從關(guān)系表的sql語句》,本文關(guān)鍵詞  sqlserver,中,操作,主從,關(guān)系,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《sqlserver中操作主從關(guān)系表的sql語句》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于sqlserver中操作主從關(guān)系表的sql語句的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 蒙阴县| 洪雅县| 克拉玛依市| 措勤县| 会理县| 龙游县| 桂东县| 凌源市| 溆浦县| 新郑市| 大丰市| 内丘县| 镇原县| 镶黄旗| 嘉定区| 青阳县| 庆城县| 墨脱县| 年辖:市辖区| 昌江| 扎兰屯市| 多伦县| 盐池县| 巫溪县| 杨浦区| 六盘水市| 兰溪市| 绍兴县| 信宜市| 喀喇| 华亭县| 佛冈县| 乌恰县| 东阿县| 咸丰县| 淮阳县| 辽阳县| 称多县| 彰化市| 上林县| 梅河口市|