- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
本文章將描述透過兩種不同的 Transact-SQL 語法將資料表欄位更新到另外資料一張資料表的欄位
文章環境
- 資料庫
- Microsoft SQL Server 2017
情境說明
範例為模擬有價證券交易資料庫建立之部分資料表內容,建立資料表說明如下
Stocks.StockDailyTradings | 有價證券每日交易結果統計 |
Stocks.StockMains | 有價證券主資料表 |
Trades.TradePerFiveSeconds | 每五秒交易結果 |
資料表內容如下
要從 Trades.TradePerFiveSeconds 資料表中取得指定日期每檔有價證券的交易結果統計:最高價、最低價、成交量並更新至 Stocks.StockDailyTradings 資料表
範例 Transact-SQL 指令碼可以在此 Github 路徑中取得
txstudio/update-column-by-join-two-tables
使用 CURSOR 進行更新
請參考下列 Transact-SQL 指令碼
update-column-use-cursor.sql
將 Trades.TradePerFiveSeconds 資料表統計好指定日期各有價證券交易資訊透過指標 (CURSOR) 的方式更新到 Stocks.StockDailyTradings 資料表,並使用交易 (Transaction) 將指令包起來
請注意!此方法在更新語法的撰寫上很明確,但為不正確的解法,指標 (CURSOR) 的特性為走單一核心處理。若還使用交易的話,資料量大時此方法將會造成資料表鎖定時間過久
使用 UPDATE JOIN 進行更新
請參考下列 Transact-SQL 指令碼
update-column-use-update-join.sql
將 Trades.TradePerFiveSeconds 資料表統計好指定日期各有價證券交易資訊透過 UPDATE JOIN 方式更新到 Stocks.StockDailyTradings 資料表
此方法雖然不太好賺寫,但可避免使用指標 (CURSOR) 會只使用到單一處理器核心的問題
UPDATE JOIN 的語法在 Oracle/SQL Server 是不同的 (MySQL 沒有執行過)
結論
在此情境中,使用指標 (CURSOR) 也是可以完成要的答案,但使用 UPDATE JOIN 語法是夠更有效率的作法
留言
張貼留言