[英]Update the parent table count updating a record in child table in sql server
[英]SQL server - updating table one record at a time
好的,請記住,盡管我已經建立和使用Access數據庫,但我對SQL Server還是相當陌生,但是我總是使用DAO與它們進行交互,而創建循環很容易。
這是我正在嘗試做的事情,到目前為止還沒有成功:
1)我需要使用歷史記錄/轉換表中的數據更新主動態表。 [SendToTbl]表用作數據庫中其余數據表的主鍵。 歷史記錄/轉換表-[SelectFromTbl]具有[SendToTbl]表中所有項目的歷史記錄。 基本上,這是一對多的關系。
2) [SelectFromTbl]的每一行都是帶有日期時間戳記的更新,因此... [SendToTbl] id#1在[SelectFromTbl]中可能有6條記錄,需要一次移動一次。
我以為我可以做這個游標-( 是的,我讀過很多帖子,其中有些人認為它是邪惡的 )-但由於它是一次性腳本,因此不會以持續的方式使用。減輕了使用游標的弊端。
當我運行腳本時,結果窗口顯示光標已成功在[SelectFromTbl]中移動。 好極了!
它只是沒有按預期更新 [SendToTbl]記錄。 rr!
我一直在想辦法解決這個問題,這是我一直在尋找的方法,但是我沒有找到答案。 [SelectFromTbl]中有超過300,000條記錄,需要一次加載一個記錄-按日期的特定順序...。
我該如何用數據更新另一個表? 我真的可以在這里使用一些幫助來解決這個問題。
這是我的公開版本
declare
@MainID int
, @myNumber int
, @myAmt decimal(25,2)
, @myName varchar(100)
DECLARE tCusor CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT [Main]
, [myNumber]
, [myAmount]
, [myName]
FROM [dbo].[SelectFromTbl]
open tCusor
fetch next from tCusor
into @MainID, @myNumber, @myAmt, @myName
while (@@FETCH_STATUS = 0)
begin
UPDATE [dbo].[SendToTbl]
SET [MainNum] = @myNumber
, [MainAmt] = @myAmt
, [MainName] = @MyName
WHERE [MainID] = @MainID
fetch next from tCusor
end
close tCusor
deallocate tCusor
GO
我不會使用游標。 簡單地說,我只能使用UPDATE FROM JOIN語句
UPDATE tbto
SET MainNum = tbfrom.myNumber,
MainAmnt = tbfrom.myAmount,
MainName = tbfrom.myName
FROM SelectFromTbl tbfrom
INNER JOIN SendToTbl tbto
ON tbfrom.Main = tbto.MainID
需要修復的是您的第二個FETCH NEXT,請參見下文。 您進行了提取,但是忘記了INTO部分。
declare
@MainID int
, @myNumber int
, @myAmt decimal(25,2)
, @myName varchar(100)
DECLARE tCusor CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT [Main]
, [myNumber]
, [myAmount]
, [myName]
FROM [dbo].[SelectFromTbl]
open tCusor
fetch next from tCusor
into @MainID, @myNumber, @myAmt, @myName
while (@@FETCH_STATUS = 0)
begin
UPDATE [dbo].[SendToTbl]
SET [MainNum] = @myNumber
, [MainAmt] = @myAmt
, [MainName] = @MyName
WHERE [MainID] = @MainID
fetch next from tCusor
into @MainID, @myNumber, @myAmt, @myName
end
close tCusor
deallocate tCusor
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.