代碼:更新子查詢
UPDATE tt_t_documents
SET t_Doc_header_ID = (SELECT
MIN(dh.Doc_header_ID)
FROM tt_t_documents td WITH (NOLOCK)
JOIN Doc_header dh WITH (NOLOCK)
ON dh.DH_doc_number = td.t_dh_doc_number
AND dh.DH_sub = 1
JOIN Pred_entry pe WITH (NOLOCK)
ON pe.Pred_entry_ID = dh.DH_pred_entry
JOIN Doc_type dt WITH (NOLOCK)
ON dty.Doc_type_ID = pe.PD_doc_type
AND dt.DT_mode = 5
HAVING COUNT(dh.Doc_header_ID) = 1);
我想更新我的專欄,但在此之前,我也想看看那裏有沒有發現只有一個ID。
這個選擇中的問題是我得到多個ID。
我該如何編寫一個查詢來更新每一行,並在同一個查詢中檢查只發現了一個id?
首先 - 閱讀(nolock),你有使用它的正當理由嗎?我懷疑不是。這可能會導致無效結果,請不要在查詢中隨機使用 – Milney
'我還想檢查是否只有一個ID已找到,並且您希望對該檢查的結果做什麼? – Lamak
@Milney - 在這種情況下,遠遠超過意想不到的結果。它可能會導致索引損壞,因爲這是更新聲明。 https://www.mssqltips.com/sqlservertip/3172/avoid-using-nolock-on-sql-server-update-and-delete-statements/ –