1. 程式人生 > >在sqlserver中使用遊標update資料記錄

在sqlserver中使用遊標update資料記錄

根據測試需要,需改變表ST_RIVER_R中某時間段內資料的欄位Z值,並且要求相鄰兩條資料Z值前後相差正負0.01。

想到了兩種方法:

1、最簡單的方法,就是直接通過客戶端編輯資料庫記錄

2、使用update命令編輯欄位值

第一種方式很簡單,就是人為修改,但是由於此表的資料量比較大,客戶端的侷限性很難找到區間內的資料,所以放棄此方法。

第二種方式,本來用update修改表資料是很簡單的一件事情,但是重要的是現在要求前後相鄰兩條資料Z值有關係,所以簡單的update語句無法實現該需求,於是想了下貌似只能用資料庫遊標來處理了,經研究寫了下面一段程式。

寫完後經過簡單測試指令碼沒問題,之後手抖的在測試庫中執行了下,結果如期而生,搞定!


--預操作的庫
USE XZ_GEODB
GO
-- 定義變數
DECLARE @Z numeric(7, 3),
@old numeric(7, 3),
@STCD varchar(8),
@TM datetime

--定義遊標物件
DECLARE contact_cursor CURSOR FOR

--查詢複核要求的結果集
select  Z,STCD,TM from ST_RIVER_R where STCD='hd000917' and TM >='2014-11-05' and TM<='2014-11-06'
FOR UPDATE

--開啟遊標進行處理
OPEN contact_cursor
--讀取第一條記錄
FETCH NEXT FROM contact_cursor
INTO @old,@STCD,@TM
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @old

--更新遊標所在行的資料
UPDATE ST_RIVER_R SET [email protected] where [email protected] AND [email protected]

--遊標移到下一行
   FETCH NEXT FROM contact_cursor INTO @Z,@STCD,@TM

--關鍵在這裡: old值為前一行的值加/減0.01
   SET @[email protected]+(sign(0.5-RAND())*0.01)
END

--關閉遊標
CLOSE contact_cursor
DEALLOCATE contact_cursor
GO

注:以上指令碼中有兩個點需要考慮,一個是遊標的使用,另一個是如何解決正負0.01這個值的隨機發生生成。

隨機生成0.01:sign(0.5-RAND())*0.01

相關推薦

sqlserver使用遊標update資料記錄

根據測試需要,需改變表ST_RIVER_R中某時間段內資料的欄位Z值,並且要求相鄰兩條資料Z值前後相差正負0.01。 想到了兩種方法: 1、最簡單的方法,就是直接通過客戶端編輯資料庫記錄 2、使用update命令編輯欄位值 第一種方式很簡單,就是人為修改,但是由於此表的資料

sqlserver怎麽查詢字段為空的記錄

http server 字段 png sqlserve style 兩種方法 ges font sqlserver中怎麽查詢字段為空的記錄的兩種方法: sqlserver中怎麽查詢字段為空的記錄

SqlServer資料型別UniqueIdentifier

SqlServer中的資料型別UniqueIdentifier到底是什麼東東? 該型別一般用來做為主鍵使用,可用SQL語法的newid()來生成一個唯一的值。我想請問的是,這個值是一個長整型的資料值呢,還是個其它的什麼值?我在程式中該如何去控制他?歡迎多多交

mongo遊標資料一致性的取捨 spring-data-mongodb 使用原生aggregate語句 mongo的runCommand與集合操作函式的關係 spring-data-mongodb與mongo shell的對應關係 mongo遊標資料一致性的取捨

除了特殊註釋外,本文的測試結果均基於 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0.6   我們在學習了一門程式語言時,一定要明白語句底層的意義,比如 User user= n

C# DataAdapter.Update() 無法更新資料刪除的資料

用DataAdapter.Update() 方法更新刪除了部分DataRow 的 DataTable 。但是資料庫中的資料沒有隨著更新而變化。   原因:DataTable 刪除 DataRow 時,使用的是DataTable.Rows.Remove(DataRow ) 或 

arcpy 連線postresql,Oracle,sqlserver,並獲取資料庫的所有資料

通過sde檔案連結,sde可在catalog中新增資料庫連線,連線成功後,右鍵屬性可以看到sde檔案被建立了。在引用此檔案即可 import arcpy arcpy.env.workspace=r"C:\Users\Administrator\AppData\Roaming\ESRI\Deskt

一個6億的表a,一個3億的表b,通過外間tid關聯,你如何最快的查詢出滿足條件的第50000到第50200的這200條資料記錄

1、如果A表TID是自增長,並且是連續的,B表的ID為索引 select * from a,b where a.tid = b.id and a.tid>500000 limit 200; 2、如果A表的TID不是連續的,那麼就需要使用覆蓋索引.TID要麼是主鍵,要麼是輔助索引,B表ID也需要有索

資料庫-使用navcat 將SqlServer資料庫結構及資料匯入到MySQL資料庫

一.概述:   本例主要講解如何使用navcat 將SqlServer的資料庫表結構和資料,匯入到MySql資料庫中 (注:本例中所有的操作均在本機) 二.環境:   navcat + mysq

如何實現sqlserver的部分表的資料定時同步到oracle

下載網站:www.SyncNavigator.CN   ---------------------------------------------------------- HKROnline SyncNavigator 8.4.1 非破解版 註冊機 授權啟用教程

mongo遊標資料一致性的取捨

除了特殊註釋外,本文的測試結果均基於 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0.6   我們在學習了一門程式語言時,一定要明白語句底層的意義,比如 User user= new Us

SQLserver 使用遊標雙重迴圈生成新的資料表內容

begin     declare @a int,@error int         declare @temp varchar(50), @temp2 varchar(50)     set @a=1  

Oracle使用遊標更新資料 Oracle遊標之select for update和where current of 語句

Oracle使用遊標更新資料 2016年11月20日 13:15:49 hzwy23 閱讀數:5313 友情推廣 ###使用遊標修改資料 ####定義一個遊標,遊標名稱為 mycursor #####更新scott使用者中emp表中empno

使用aggregate在MongoDB查詢重複的資料記錄

    http://www.cnblogs.com/jaxu/p/5143707.html   db.slice.aggregate( [ { $group: { _id: {UserId:1,NodeKey:1,DocumentId:1,

編寫一個函式print,列印一個學生的成績陣列,該陣列有5個學生的資料記錄,每個記錄包括num,name,score[3],用主函式輸入這些資料,用print輸出這些記錄

編寫一個函式print,列印一個學生的成績陣列,該陣列中有5個學生的資料記錄,每個記錄包括num,name,score[3],用主函式輸入這些資料,用print輸出這些記錄 程式碼如下: #include<stdio.h> #define N 5 typedef struc

記錄手動處理form表單對table表格的行資料的收集

通過ajax傳送資料到controller來處理,這是大部分web應用都會遇到的問題。而對於form表單資料的收集,如果要傳送資料少的話,我們可以一個一個來收集,而如果有很多也就是說批量操作那麼我們可以通過 $("#FormId").serializeArray();來自動

SQL(insert、delete、update)執行成功,但是資料庫表無顯示無記錄

     如題,程式中insert一條記錄,除錯過程中根據執行結果發現此條sql已經執行成功(影響行數為1且插入記錄已生成自增主鍵正確值),但是查詢資料庫相應表時發現表中並無相應記錄,通過直接在表中插入測試資料也能發現已有記錄的主鍵值自增後的值已被佔用(例如:id為主鍵,

sqlserver,如何把一列的多行資料在一行顯示

SQL code問題描述: 無論是在sql 2000,還是在 sql 2005 中,都沒有提供字串的聚合函式, 所以,當我們在處理下列要求時,會比較麻煩: 有表tb, 如下: id value ----- ------ 1 aa 1 bb 2

算法系列-大資料面試題-兩個大檔案找出共同記錄

1.題目描述給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的url?2.思考過程(1)首先我們最常想到的方法是讀取檔案a,建立雜湊表(為什麼要建立hash表?因為方便後面的查詢),然後再讀取檔案b,遍歷檔案b中每個

資料面試題-兩個大檔案找出共同記錄

1.題目描述給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的url?2.思考過程(1)首先我們最常想到的方法是讀取檔案a,建立雜湊表(為什麼要建立hash表?因為方便後面的查詢),然後再讀取檔案b,遍歷檔案b中每個

sqlserverDATE型別的資料轉化 CONVERT

主要描述的是SQL Server使用convert取得datetime日期資料的實際操作流程,在實際操作中用SQL Server資料庫中用convert來獲取datetime日期資料,以下例項包含各種日期格式的轉換。 語句及查詢結果:  Select CONVERT(