1. 程式人生 > >sql逐條更新表資料

sql逐條更新表資料

一開始,參考網上的逐條更新辦法:

declare @yuyueskid varchar(40)

declare @shangkesj datetime
declare @yuyuezt int
declare @i int
declare @j int
set @j=(select count(*) from yuyuesk)
set @i=1
while   @i<[email protected]
begin               
    set @yuyueskid=(select yuyueskid from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, yuyueskId from yuyuesk ) as sp  where
[email protected]
)
    set @shangkesj=(select shangkesj from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, shangkesj from yuyuesk ) as sp  where [email protected])
    set @yuyuezt=(select yuyuezt from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, yuyuezt from yuyuesk ) as sp  where
[email protected]
)
    update               
        yuyuesk
    set
        yuyuezt=4
    where                
        [email protected] and @yuyuezt=1 and @shangkesj<GETDATE()
        set @[email protected]+1

end

出現的問題是,雖然可以逐條更新,但是需要把表內的資料全部過一次,如果表內資料太多,效率會非常低。

然後改變思路,先把符合更新條件的資料插入臨時表,然後再更新:

declare @yuyueskid varchar(40)
declare @shangkesj datetime
declare @yuyuezt int
declare @i int
declare @j int
select * into #yuyuesk from yuyuesk where yuyuezt=1
set @j=(select count(*) from #yuyuesk)
set @i=1
while   @i<[email protected]
begin               
    set @yuyueskid=(select yuyueskid from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, yuyueskId from #yuyuesk ) as sp  where [email protected])
    set @shangkesj=(select shangkesj from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, shangkesj from #yuyuesk ) as sp  where [email protected])
    set @yuyuezt=(select yuyuezt from ( select ROW_NUMBER() over (order by yuyueskid asc ) as Row, yuyuezt from #yuyuesk ) as sp  where [email protected])
    update               
        yuyuesk
    set
        yuyuezt=4
    where                
        [email protected] and @yuyuezt=1 and @shangkesj<GETDATE()
        set @[email protected]+1
end

完美解決

相關推薦

sql逐條更新資料

一開始,參考網上的逐條更新辦法: declare @yuyueskid varchar(40) declare @shangkesj datetime declare @yuyuezt int declare @i int declare @j int set @j=(se

MySQL中使用replace into語句批量更新資料

作為示例,我們在這裡使用名為testdb的資料庫,並且在其中建立兩張一模一樣的表: drop table if exists test_table_1; create table test_table_1 ( name varchar(30) primary key, age integer

C# Oracle.ManagedDataAccess 批量更新資料

    這是我第一次發表部落格。以前經常到部落格園查詢相關技術和程式碼,今天在寫一段小程式時出現了問題, 但在網上沒能找到理想的解決方法。故註冊了部落格園,想與新手分享(因為本人也不是什麼高手)。     vb.net和C#操作Oracle資料庫已經用了N多年了。由

Linq實現sql一張資料不存在另外一張

Linq中包含查詢 //Linq程式碼: T_WxMaterials.Where(n=>T_VideoMsgs.Select(m=>m.MediaID).Contains(n.MediaID)) //生成的sql語句: SELECT [t0].[ID], [t0].[

SQL Server 2008 資料改變後傳送訊息(.net 擴充套件函式法【穩定】【簡潔】)

       一直以來應用程式中資料的 PUSH/PULL 應用效果,是作為實時系統的關鍵點。市面上面各種ESB,要麼價格不菲,要麼相當龐大,入門都夠很長時間。有人說還有說訊息伺服器MSMQ,ActiveMQ(這個比較推薦,客戶端語言支援較為豐富),JSM 等還有WebSo

SqlServer和Oracle從多行記錄(資料集)中查詢結果並拼接成一個字串的SQL語句(縱資料轉成拼接的文字)

使用情景: 例如:需要從學生成績表中,查詢分數大於95分的所有學生編號,用逗號分隔成一個字串。 準備測試資料: create table score (id int,score int) insert into score values(1,90) insert into

MYSQL 使用儲存過程批量更新資料

DELIMITER //CREATE PROCEDURE `update_user`()  BEGINDECLARE userId BIGINT;DECLARE openId VARCHAR(40);declare stop int default 0; DECLARE cu

【Hadoop】HBase上安裝使用Phoenix來用sql語句更新操作資料,安裝的過程各種坑和經驗

畢竟可以使用類似sql的標準語句來操作HBase想來還是滿爽的事情。不過只能是shell。 首先,下載安裝phoenix。 我們先到apache來安裝 在apache找到目前對應的phoenix。由於我們的HBase版本是1.2.4,所以選擇了4.9.

當執行sql更新失誤,添加了錯誤的判斷條件,導致資料資料出錯時,如何利用備份資料庫實現聯合更新還原資料

  首先得有備份資料庫,沒有備份肯定無法聯合更新回覆。 我錯誤更新了 [SBSDB].[dbo].[wallet_user_info]中的使用者名稱user_name 我的備份資料庫及對應資料表SBSDBTest.dbo.t_user_detail  先select 出錯

mysql 一條sql更新多張資料

<update id="deleteActor" parameterType="java.lang.String"> UPDATE actor_tbl a LEFT JOIN video_actor_tbl b ON a.sn = b.actorsn SET a.

oracle資料庫中sql語言建立更新,刪除資料

一sql語言的分類 sql語言分為4類:DQL(資料查詢語言),DML(資料操縱語言),資料定義語言(DDL),資料控制語言(DCL)。 二資料定義語言 資料定義語言用於建立,刪除,修改資料庫中的各種物件,物件比如-表,索引,檢視,同義詞、聚簇等 CREATETABLE/

SQL從一個查詢資料插入/更新到另一個

在應用中我們可能會遇到一些資料匯入操作,如從一個表查詢出資料插入到另外一個表,或從一個表查詢出資料更新到另外一個表,這些操作一般都是一次性操作,針對一次性操作,效率只是第二位,第一位的是功能實現。這個操作既可以用於同一個資料庫不同表之間,也可以用於不同資料庫不同

SQL從一個查詢資料更新到另外一個

1、更新1個欄位update ElectricMeterTemp a set fydlbid=(select fid from CT_EXP_ElectricityType b where a.fydl

資料庫同步資料利器,oracle+mybatis 一個sql控制所有增刪改 ${xxx} 和 #{xxx}的區別

資料庫同步表資料利器,mybatis 一個sql控制所有表增刪改 在專案開發過程中,尤其是多系統專案叢集中,經常會遇到需要從一個數據庫同步n張表到另一個數據庫中的需求,還需要對這些表做監聽,在發現有修改的時候進行增量資料同步。 通常的方法是在接受資料庫對應的專案中寫介面供資料來源專案

mssql sqlserver 使用sql指令碼 清空所有資料庫資料的方法分享

摘要: 下文講述清空資料庫中所有表資訊的方法分享,如下所示: 實驗環境:sql server 2008 實現思路: 1.禁用所有約束,外來鍵 2.禁用所有觸發器 3.刪除表資料 4.開啟觸發器 5.開啟約束 CREATE PROCEDURE proc_deleteDateSql /* 生

SQL與eclipse的連線,從資料庫讀取資料,將二維陣列資料匯入

示例: import java.util.List; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; impor

用JAVA連線SQL實現更新資料

在程式碼中更新資料 <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*" pageEncoding="UTF-8"%> <!DOCTYPE html>

SQL批量更新 關係更新

很多人在做資料的批量更新時..如果更新的內容是從其他表查出來的..很容易這麼寫.. UPDATE TABLE1 SET COLUMN1=(SELECT SUM(SOMETHING) FROM TABLE2 WHERE COLUMN2=TABLE1.COLUMN2) 這樣的結構對於一般的小資料更新

sql學習 sqlserver複製資料到另一個

sqlserver複製表資料到另一個表 SQL Server中,如果目標表存在: insert into 目標表 select * from 原表; SQL Server中,,如果目標表不存在: select * into

sql server 快捷生成清除某個資料庫所有資料

https://blog.csdn.net/saga_gallon/article/details/52797300 兩個步驟, 1,查詢出所有表,在結果前面加TRUNCATE TABLE  SELECT 'TRUNCATE TABLE ['&nb