代码:更新子查询
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/ –