下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫(kù) > MS_SQL > SQL開發(fā)知識(shí):SQL Server如何通過創(chuàng)建臨時(shí)表遍歷更新數(shù)據(jù)詳解

          SQL開發(fā)知識(shí):SQL Server如何通過創(chuàng)建臨時(shí)表遍歷更新數(shù)據(jù)詳解

          時(shí)間:2024-03-12 20:33作者:下載吧人氣:33

          前言:

          前段時(shí)間新項(xiàng)目上線為了趕進(jìn)度很多模塊的功能都沒有經(jīng)過詳細(xì)的測(cè)試導(dǎo)致了生成環(huán)境中的數(shù)據(jù)和實(shí)際數(shù)據(jù)對(duì)不上,因此需要自己手寫一個(gè)數(shù)據(jù)庫(kù)腳本來更新下之前的數(shù)據(jù)。(線上數(shù)據(jù)庫(kù)用是SQL Server2012)關(guān)于數(shù)據(jù)統(tǒng)計(jì)匯總的問題肯定會(huì)用到遍歷統(tǒng)計(jì)匯總,那么問題來了數(shù)據(jù)庫(kù)中如何遍歷呢?好像并沒有for和foreach這種類型的功能呀,不過關(guān)于數(shù)據(jù)庫(kù)遍歷最常見的方法當(dāng)然是大家經(jīng)常會(huì)想到的游標(biāo)啦,但是這次我并沒有使用游標(biāo),而是通過創(chuàng)建臨時(shí)表的方式來更新遍歷數(shù)據(jù)的。

          為什么不使用游標(biāo),而使用創(chuàng)建臨時(shí)表?

          首先使用游標(biāo)的方式遍歷數(shù)據(jù)可能代碼上比較直觀,但是代碼比較繁瑣(聲明游標(biāo),打開游標(biāo),使用游標(biāo),關(guān)閉游標(biāo)和釋放游標(biāo))并且不符合操作集合的原則,而且也非常的耗費(fèi)性能,因此通常數(shù)據(jù)量比較大的情況下不推薦使用游標(biāo)。通過臨時(shí)表while遍歷數(shù)據(jù),更符合我們?nèi)粘5木幊趟枷氩僮骷显瓌t,性能上雖不敢保證表使用游標(biāo)要好多少,但是在把臨時(shí)表使用恰當(dāng)?shù)那疤崾悄軠p少大量的性能消耗,并且使用起來非常簡(jiǎn)單易懂。

          通過創(chuàng)建臨時(shí)表遍歷更新數(shù)據(jù):

          注意:這里只是一個(gè)簡(jiǎn)單的臨時(shí)表更新實(shí)例。

          我的目的是把TalkingSkillType表中的Sort值更新成為與Id一樣的值!

          未更新前的數(shù)據(jù)如下圖所示:

          SQL開發(fā)知識(shí):SQL Server如何通過創(chuàng)建臨時(shí)表遍歷更新數(shù)據(jù)詳解

          臨時(shí)表遍歷更新SQL語句:

          —-SQL SERVER通過臨時(shí)表遍歷數(shù)據(jù)
          — 判斷是否存在(object(‘objectname’,‘type’))
          IF OBJECT_ID(‘tempdb.dbo.#temp’,’U’) IS NOT NULL DROP TABLE dbo.#temp;

          GO
          — 聲明變量
          DECLARE
          @ID AS INT,
          @Name AS VARCHAR(50),
          @Num AS INT

          –數(shù)據(jù)插入臨時(shí)表(select * INTO #Temp from 來源表)
          SELECT ID,Name INTO #temp FROM TalkingSkillType

          –查詢臨時(shí)表中數(shù)據(jù)
          –SELECT * FROM #temp

          set @Num=0 –賦初始值

          –查詢是否存在記錄,只要存在會(huì)一直循環(huán)直到不存在(WHILE EXISTS)
          WHILE EXISTS(SELECT ID FROM #temp)
          BEGIN

          set @Num= @Num + 1

          — 取值(把臨時(shí)表中的值賦值給定義的變量)
          SELECT top 1 @ID= ID,@Name=Name FROM #temp;

          — 輸出操作(用于查看執(zhí)行效果)
          PRINT(@Num)

          –更新
          UPDATE TalkingSkillType SET Sort=@ID where id=@ID

          — 刪除本次操臨時(shí)表中的數(shù)據(jù)(避免無限循環(huán))
          DELETE FROM #temp WHERE ID=@ID;
          END

          –刪除臨時(shí)表 #temp
          –drop table #temp

          標(biāo)簽MSSQL,SQLServer,技術(shù)文檔,數(shù)據(jù)庫(kù),SQLSERVER

          相關(guān)下載

          查看所有評(píng)論+

          網(wǎng)友評(píng)論

          網(wǎng)友
          您的評(píng)論需要經(jīng)過審核才能顯示

          熱門閱覽

          最新排行

          公眾號(hào)

          主站蜘蛛池模板: 亚洲国产日韩一区高清在线| 欧亚精品一区三区免费| 无码av不卡一区二区三区| 亚洲一区精彩视频| 久久精品无码一区二区WWW| 人妻少妇AV无码一区二区| 99久久精品国产高清一区二区| 精品乱子伦一区二区三区高清免费播放 | 免费日本一区二区| 亚洲电影一区二区三区| 亚洲av无一区二区三区| 色系一区二区三区四区五区| 视频一区视频二区在线观看| 狠狠综合久久AV一区二区三区| 人妻天天爽夜夜爽一区二区| 精品国产一区二区三区香蕉事| 一区二区三区免费电影| 无码人妻一区二区三区在线视频| 自拍日韩亚洲一区在线| 免费一区二区视频| 亚洲一区二区三区四区在线观看| 国产精品久久久久久一区二区三区 | 日本v片免费一区二区三区 | 国产一区二区三区视频在线观看| 大屁股熟女一区二区三区| 精品欧洲av无码一区二区| 搜日本一区二区三区免费高清视频 | 午夜福利一区二区三区在线观看 | 日韩精品无码一区二区三区AV| 国产香蕉一区二区精品视频| 日本一区二区在线免费观看| 一区二区三区四区精品视频| 美女视频一区二区| 亚洲国产视频一区| 伊人精品视频一区二区三区| 激情久久av一区av二区av三区| 亚洲第一区香蕉_国产a| 波多野结衣一区二区三区aV高清 | 国产福利一区二区| 91精品一区二区| 国产视频一区在线观看|