目標:
- 從 TAB_Aditivos_Pagamentos 獲取“Banco”和“Lan?amento”值,從 TAB_Aditivos_Pagamentos 搜索包含“Lan?amento”和“Banco”的“Descri??o”,然后更新 TAB_Aditivos_Pagamentos,設定“TAB_Aditivos_Pagamentos.Descri??o = TAB_Movimentos.Descri??o”和“TAB_Aditivo” .蘭卡門托"
- 忽略“Banco”或“Lan?amento”是否等于 0。
到目前為止的問題:
- 我正在使用“while”來完成這項任務,但這需要很多時間,而且我遇到了很多錯誤,我認為在 SQL 中可以進行單個查詢來解決這個問題,這就是為什么我這里;
- 有時在“Descri??o”選擇中有超過 1 個具有相同“Banco”的結果,我的想法是使用類似“(DATEDIFF(d, @Date_Tab1, @Date_Tab2) < 7 AND DATEDIFF(d, @Date_Tab2, @ Date_Tab1) > -7)",可以解決這個問題,或者簡單地獲得 Top 1 結果;
我已經做了什么:
DECLARE @Total INT = (SELECT COUNT(1) FROM TAB_Aditivos_Pagamentos)
DECLARE @n INT = 1
DECLARE @sucesso int = 0
WHILE @n <= @Total
BEGIN
DECLARE @Lanc_PP INT = (SELECT Lan?amento FROM (SELECT Row_Number() OVER (Order By ID_Aditivo) As RowNum, * FROM TAB_Aditivos_Pagamentos) t2 WHERE RowNum = @n)
DECLARE @Banco_PP INT = (SELECT Banco FROM (SELECT Row_Number() OVER (Order By ID_Aditivo) As RowNum, * FROM TAB_Aditivos_Pagamentos) t2 WHERE RowNum = @n)
DECLARE @Data_PP DATE = (SELECT Data FROM (SELECT Row_Number() OVER (Order By ID_Aditivo) As RowNum, * FROM TAB_Aditivos_Pagamentos) t2 WHERE RowNum = @n)
DECLARE @ID_Aditivo INT = (SELECT ID_Aditivo FROM (SELECT Row_Number() OVER (Order By ID_Aditivo) As RowNum, * FROM TAB_Aditivos_Pagamentos) t2 WHERE RowNum = @n)
IF @Banco_PP > 0 AND @Lanc_PP > 0
BEGIN
DECLARE @Lanc_MOV INT = (SELECT Lan?amento FROM TAB_Movimentos WHERE Descri??o LIKE CONCAT('%', REPLACE(STR(@Lanc_PP,6),' ','0'),'%') AND Banco = @Banco_PP)
DECLARE @Data_MOV DATE = (SELECT Data FROM TAB_Movimentos WHERE Lan?amento = @Lanc_PP AND Banco = @Banco_PP)
DECLARE @Descri??o VARCHAR(MAX) = (SELECT Descri??o FROM TAB_Movimentos WHERE Lan?amento = @Lanc_MOV AND Banco = @Banco_PP)
UPDATE TAB_Aditivos_Pagamentos SET Lan?amento = @Lanc_MOV, Descri??o = @Descri??o WHERE Lan?amento = @Lanc_PP AND Banco = @Banco_PP AND ID_Aditivo = @ID_Aditivo -- AND (DATEDIFF(d, @Data_PP, @Data_MOV) < 7 AND DATEDIFF(d, @Data_PP, @Data_MOV) > -7)
END
END
試圖澄清我的問題的列印螢屏:

我正在將一個資料庫從另一個系統匯入到我的...這就是為什么“Lan?amento”在這兩個表中不同的原因
uj5u.com熱心網友回復:
SQL 中的回圈總是一個不好的跡象。您應該能夠在使用 join 的更新中執行此操作。
首先,撰寫帶有連接的選擇。
select *
from TAB_Aditivos_Pagamentos ap
join TAB_Movimentos m
on m.Banco = ap.Banco
and m.Descri??o like '%' ap.Lan?amento '%'
修改它以獲得所需的連接,例如洗掉重復項。
然后將 替換select為update。
update ap
set ap.Descri??o = m.Descri??o, ap.Lan?amento = m.Lan?amento
from TAB_Aditivos_Pagamentos ap
join TAB_Movimentos m
on m.Banco = ap.Banco
and m.Descri??o like '%' ap.Lan?amento '%'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430075.html
