1. 程式人生 > >SQLserver使用臨時表代替遊標遍歷

SQLserver使用臨時表代替遊標遍歷

使用遊標做遍歷操作

DECLARE @AssessThemeID INT
DECLARE @EntityID INT

DECLARE MyCursor CURSOR  --定義遊標
FOR
    SELECT ContactID,AssessThemes.ID AS AssessThemeID
    FROM AssessWorkLoadAudit LEFT JOIN AssessThemes 
    ON AssessWorkLoadAudit.AssessThemeID=AssessThemes.ID 
    WHERE AssessThemes.ID IN 
    (
    SELECT
ID FROM AssessThemes WHERE YearNum=2016 OR YearNum=2015 ) OPEN MyCursor --開啟遊標 FETCH FROM MyCursor INTO @EntityID,@AssessThemeID --取遊標第一行,將欄位值賦予@EntityID和@AssessThemeID WHILE(@@FETCH_STATUS=0) BEGIN IF(@EntityID IS NOT NULL AND @AssessThemeID IS NOT NULL) BEGIN --執行帶參的儲存過程 AnnualSummaryUpdateAssessTabletest EXEC
AnnualSummaryUpdateAssessTabletest @EntityID,@AssessThemeID END FETCH FROM MyCursor INTO @EntityID,@AssessThemeID --取遊標的下一行並將欄位值賦予@EntityID和@AssessThemeID END CLOSE MyCursor --關閉遊標 DEALLOCATE MyCursor --釋放遊標

使用臨時表做遍歷操作

臨時表:臨時表的名稱以“#”開頭,臨時表儲存在tempdb這個系統資料庫當中

臨時表如何實現遍歷操作?

在根據查詢結果建立臨時表時,在臨時表中加入一列標識列,標識列資料型別為整形,且取值為一個“從1開始以1遞增”的序列

。形如“1、2、3、4、5、·······”,這個序列可以唯一標識每一行,通過迴圈定位到某一行,對行進行相應的操作。
標識列:IDENTITY(INT) AS NewID
指令碼如下:

--建立臨時表#AWLA
SELECT IDENTITY(INT) AS NewID,* INTO #AWLA 
FROM (SELECT ContactID,AssessThemes.ID AS AssessThemeID
    FROM AssessWorkLoadAudit LEFT JOIN AssessThemes 
    ON AssessWorkLoadAudit.AssessThemeID=AssessThemes.ID 
    WHERE AssessThemes.ID IN (SELECT ID FROM AssessThemes WHERE YearNum=2016 OR YearNum=2015)
    ) AS A

DECLARE @EntityID INT
DECLARE @AssessThemeID INT
DECLARE @NewID INT
DECLARE @RowCount INT 
SELECT @NewID=1,@RowCount=MAX(NewID) FROM #AWLA 
WHILE @NewID<[email protected]
BEGIN
    SELECT @EntityID=ContactID,@AssessThemeID=AssessThemeID FROM #AWLA WHERE [email protected]
    EXEC AnnualSummaryUpdateAssessTabletest @EntityID,@AssessThemeID
    SET @[email protected]+1
END
--刪除臨時表
DROP TABLE #AWLA

相關推薦

SQLserver使用臨時代替遊標

使用遊標做遍歷操作 DECLARE @AssessThemeID INT DECLARE @EntityID INT DECLARE MyCursor CURSOR --定義遊標 FOR

SQL SERVER 建臨時、迴圈插入資料、遊標資料庫

create table #tmp (id int) --建立臨時資料表 declare @x int --迴圈插入資料 set @x=1 while @x<=10 begin insert into #tmp values(@x) set @[email&

mysql中利用遊標中的資料時未正常獲取資料

問題描述: mysql中利用遊標遍歷表中的資料時未正常獲取資料 問題重現: 建立儲存過程(mysql) 遊標遍歷的表中對應的資料如下 執行儲存過程時卻並未正常獲取資料 問題分析: 儲存過程中變數的定義不要和我們表中的欄位名相同(不區分大小寫),比如上面問題中的表字段為START

Sql Server在儲存過程裡面使用遊標一個

這裡關於SqlServer有兩個知識點:一個是使用遊標遍歷表,另一個是使用if not exists的sql語句進行插入。 一、使用遊標遍歷表   這個表可以是資料庫的表,也可以是外面DataTable型別的引數傳進去,使用遊標可以概括為以下步驟:宣告遊標、開啟遊標、讀取

sqlserver儲存過程中利用遊標結果集簡單示例及查詢資料庫時間

本例項用的是sqlserver2005   在儲存過程中遍歷結果,和查詢資料庫中所有 儲存過程名稱 加以處理以文字形式輸出 原始碼: drop procedure findName create procedure findName--建立一個名為findName的儲存過

「C語言」單鏈/雙向鏈的建立//插入/刪除

ins lin mon 雙向鏈表 gte aix5 tag cbe ssp MVC%E6%9E%B6%E6%9E%84%E5%AD%A6%E4%B9%A0%E4%B9%8BEasyFirst%E2%80%94%E2%80%94%E5%BF%AB%E7%82%B9%E5%A4

關於checkbox對應一張時如何

scrip 代碼 input script text sub val 獲取 type html代碼: <table> <tr> <td><input name=‘one‘ type=‘checkbox‘ valu

Depth First Search(給出臨接輸出dfs的順系)

滴答滴答---題目連結  Depth-first search (DFS) follows the strategy to search ”deeper” in the graph whenever possible. In DFS, edges are recursively exp

Oracle 遊標 顯式遊標 靜態遊標 OPEN v_cur(); WHILE v_cur%FOUND LOOP; LOOP FETCH v_cur INTO v_row

-- Created on 2018/11/6 by YXQ  --顯示遊標 & 靜態遊標的處理 declare      --定義(遊標一個可以遍歷的結果集)      --宣告cursor,建立和命名一個sql工作

js技巧用Map集合代替Array

很多時候我們在做頁面的時候會遇到這樣的一個情況,我們需要顯示一個下拉框,然後需要把選擇的值傳到後臺,而頁面需要顯示我們選擇的資料項的名稱,我們可能會這樣實現: <!DOCTYPE html>

mysql儲存過程遊標之while篇

最近業務需要翻閱了很多關於遊標遍歷使用的帖子 總結一下 直接上程式碼吧 IN `bindid_in` char(36) --輸入引數 BEGIN /** 淨值=固定資產原值-累計折舊 累計折舊=月折舊額*已計提月份 月折舊額=(固定資產原價-(固定資產原價*3%的殘值率))/預計使

迴圈單鏈的建立,和銷燬

迴圈單鏈表的簡單操作 因為迴圈單鏈表和單鏈表的插入,刪除等操作大同小異 ,因此我只總結了迴圈連結串列的建立,遍歷以及銷燬操作 迴圈連結串列的定義 //定義一個單鏈表 typedef struct LNode { int data; struct LNode* next; }L

【資料結構】圖的基本操作——圖的構造(鄰接矩陣,鄰接),(DFS,BFS)

鄰接矩陣實現如下: /* 主題:用鄰接矩陣實現 DFS(遞迴) 與 BFS(非遞迴) 作者:Laugh 語言:C++ ******************************************* 樣例輸出如下: 請選擇圖的型別(a - 無向圖, b - 有向圖):a 請輸入總頂點

單鏈建立與

不連續的儲存結構 包含n個節點,每個節點包含資料域和指標域,指標域指向下一個節點 下述連結串列指單鏈表。。   頭結點只有指標域,是整個連結串列入口,相關的遍歷查詢都需要從頭指標開始,頭結點資料域沒有意義為一個隨機值 #include "stdafx.h"#include <stdio.h>

(七)雙鏈演算法之

(七)雙鏈表演算法之遍歷 雙鏈表正向遍歷雙鏈表逆向遍歷 雙鏈表正向遍歷   正向遍歷和單鏈表相同,詳情見單鏈表。 1/* 2 *pH : 頭節點 3 *return 返回尾部節點地址 4 */ 5struct nod

查詢MDB中高程點的高程值有0值的圖幅(用遊標查詢某個欄位的值),並將查到的結果寫入到TXT中

1、 mdbs = arcpy.ListWorkspaces("*","Access") 2、 FeatureClasses = arcpy.ListFeatureClasses() 3、 Fields = arcpy.ListFields(FeatureClass) 4、 cursor =

查找MDB中高程點的高程值有0值的圖幅(用遊標查找某個字段的值),並將查到的結果寫入到TXT中

name addm open ces pat message back ext put 1、 mdbs = arcpy.ListWorkspaces("*","Access") 2、 FeatureClasses = arcpy.ListFeatureClasses()

圖的鄰接表示及

圖也可以用鄰接表表示。各個結點中存放了結點的資訊,並且由一個指標變數,指向第一條邊,第一條變又指向第二條邊,以此類推。圖的鄰接表的程式碼如下: /********************************/ /******圖的鄰接表的建立及遍歷****/ #inclu

鄰接深度優先和廣度

迴圈 佇列標頭檔案:Queue.h #ifndef QUEUE_H #define QUEUE_H #define MAXSIZE 20 typedef struct Node{ int data[MAXSIZE]; int front; int order; }Qu

SQLServer 臨時的使用

臨時表在Sqlserver資料庫中,是非常重要的,下面就詳細介紹SQL資料庫中臨時表的特點及其使用,僅供參考。臨時表與永久表相似,但臨時表儲存在tempdb中,當不再使用時會自動刪除。臨時表有兩種型別:本地和全域性。它們在名稱、可見性以及可用性上有區別。對於臨時表有如下幾個特