A. Mysql查詢將查詢的結果進行更新
有時候我們會不小心對一個大表進行了 update,比如說寫錯了 where 條件......
此時,如果 kill 掉 update 線程,那回滾 undo log 需要不少時間。如果放置不管,也不知道 update 會持續多久。
那我們能知道 update 的進度么?
實驗
我們先創建一個測試資料庫:
那我們怎麼准確的這個倍數呢?
一種方法是靠經驗:update 語句的 where 中會掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來估算系數。
另一種方法就是在同樣結構的較小的表上試驗一下,獲取倍數。
這樣,我們就能准確估算一個大型 update 的進度了。
B. sql存儲過程更新數據
DROPPROCEDUREexp3
GO
CREATEPROCEDUREexp3
@snchar(10)='2015200011',
@sjhchar(11)='12018060001',
@kgcjint,
@zgcjint,
@cjint
AS
UPDATEcyjgSETkgtcj=@kgcj,zgtcj=@zgcj,zcj=@cjWHEREsno=@snANDsjbh=@sjh;
go
EXECUTEexp3@kgcj=67,@zgcj=26,@cj=93
go
C. sql如何更新數據(用sql語句)
代碼如下:
--創建鏈接伺服器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程伺服器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用戶名 ', '密碼 '
--查詢示例
select * from ITSV.資料庫名.dbo.表名
--導入示例
select * into 表 from ITSV.資料庫名.dbo.表名
--以後不再使用時刪除鏈接伺服器
exec sp_dropserver 'ITSV ', 'droplogins '
--連接遠程/區域網數據(openrowset/openquery/opendatasource)
--1、openrowset
--查詢示例
select * from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '用戶名 '; '密碼 ',資料庫名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '用戶名 '; '密碼 ',資料庫名.dbo.表名)
--把本地表導入遠程表
insert openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '用戶名 '; '密碼 ',資料庫名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '用戶名 '; '密碼 ',資料庫名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要創建一個連接
--首先創建一個連接創建鏈接伺服器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程伺服器名或ip地址 '
--查詢
select *
FROM openquery(ITSV, 'SELECT * FROM 資料庫.dbo.表名 ')
--把本地表導入遠程表
insert openquery(ITSV, 'SELECT * FROM 資料庫.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 資料庫.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta
D. sql資料庫更新語句
sql更新資料庫語句
update語句用於更新修改指定記錄的數據,其用法為:
update
tbl_name
set
col_name1=value1,
col_name2=value2,
…
where
conditions
對符合條件的記錄,更新修改指定欄位的值。若沒有where條件限定,則對所有記錄進行更新修改。例如:
圖
4.23
更新記錄
E. sql 中數據更新問題:
若商品號在商品表中唯一,下面的代碼在各類SQL中通用
update 銷售記錄 set
總金額 = (select 商品價格 from 商品 where 商品.商品號=銷售記錄.商品號) * 數量
若是M$SQL, 可用下面的代碼
update a set 總金額 = 商品價格 * 數量
from 銷售記錄 a
join 商品 b on b.商品號=a.商品號
F. sql 數據更新
Update Tab1 Set b = (Select b From Tab2 Where Tab1.a = Tab2.a)
G. SQL判斷並更新數據
UPDATEOrder_Main
SETPK=1
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdAND(Pro='A'ORPro='D')
ANDNOTEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='F')
UPDATEOrder_Main
SETPK=2
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='A')
ANDEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='D')
H. sql怎樣把一個表的數據更新到另一個表
如果都是SQL的資料庫的話,在第二步的時候就默認選擇SQL Server 的Microsoft OLE DB提供程序 就可以了。
1、打開企業管理器,打開要導入數據的資料庫,在表上按右鍵,所有任務-->導入數據,彈出DTS導入/導出向導,按 下一步 ;
2、選擇數據源 Microsoft Excel 97-2000,文件名 選擇要導入的xls文件,按 下一步;
3、選擇目的 用於SQL Server 的Microsoft OLE DB提供程序,伺服器選擇本地(如果是本地資料庫的話,如 VVV),使用SQL Server身份驗證,用戶名sa,密碼為空,資料庫選擇要導入數據的資料庫(如 client),按 下一步;
4、選擇 用一條查詢指定要傳輸的數據,按 下一步;
5、按 查詢生成器,在源表列表中,有要導入的xls文件的列,將各列加入到右邊的 選中的列 列表中,這一步一定要注意,加入列的順序一定要與資料庫中欄位定義的順序相同,否則將會出錯,按 下一步;
6、選擇要對數據進行排列的順序,在這一步中選擇的列就是在查詢語句中 order by 後面所跟的列,按 下一步;
7、如果要全部導入,則選擇 全部行,按 下一步;
8、則會看到根據前面的操作生成的查詢語句,確認無誤後,按 下一步;
9、會看到 表/工作表/Excel命名區域 列表,在 目的 列,選擇要導入數據的那個表,按 下一步;
10、選擇 立即運行,按 下一步;
11、會看到整個操作的摘要,按 完成 即可。
I. mysql 我如何查詢一批數據後,並更新這批數據
有時候我們會不小心對一個大表進行了 update,比如說寫錯了 where 條件......
此時,如果 kill 掉 update 線程,那回滾 undo log 需要不少時間。如果放置不管,也不知道 update 會持續多久。
那我們能知道 update 的進度么?
實驗
我們先創建一個測試資料庫:
那我們怎麼准確的這個倍數呢?
一種方法是靠經驗:update 語句的 where 中會掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來估算系數。
另一種方法就是在同樣結構的較小的表上試驗一下,獲取倍數。
這樣,我們就能准確估算一個大型 update 的進度了。