2016-12-29 107 views
0

如何在T-SQL中編寫等效的SQL腳本?SQL Server腳本遍歷每條記錄並更新它

我已經在MS Access中編寫了這段代碼來編輯記錄 - 我怎麼能在SQL Server中做同樣的事情?

對於J_CaseNumJ_Index J_PersonIndex的每個組合需要增加。對於給定的組合,可以有從1到50人的任何地方。

Dim rs As Recordset 
Dim rs1 As Recordset 
Dim i As Long 
Dim s As String 

sql = "Select J_CaseNum, J_Index, J_VehicleIndex, J_PersonIndex, J_CaseNo, J_PersonID, Ind_Last_NM from dbo_DCIPS Order By J_CaseNum, J_Index, Ind_Last_NM" 
Set rs = CurrentDb.OpenRecordset(sql) 
Set rs1 = CurrentDb.OpenRecordset(sql) 

rs.MoveLast 
cnt = rs.RecordCount 
rs.MoveFirst 
i = 0 

SysCmd acSysCmdInitMeter, "_", cnt 

While Not rs.EOF 
    If i = 0 Then 
     rs.Edit 
     rs!J_PersonIndex = "01" 
     rs!J_CaseNo = rs!J_CaseNum & rs!J_Index 
     rs!J_PersonID = rs!J_CaseNo & rs!J_VehicleIndex & rs!J_PersonIndex 
     rs.Update 
     j = 1 
     i = 1 
     rs.MoveNext 
    Else 
     If (rs1!J_CaseNum = rs!J_CaseNum) And (rs1!J_Index = rs!J_Index) Then 
      j = j + 1 
      s = j 
      rs.Edit 
      rs!J_PersonIndex = Right("00" + s, 2) 
      rs!J_CaseNo = rs!J_CaseNum & rs!J_Index 
      rs!J_PersonID = rs!J_CaseNo & rs!J_VehicleIndex & rs!J_PersonIndex 
      rs.Update 
      rs.MoveNext 
      rs1.MoveNext 
     Else 
      j = 1 
      s = j 
      rs.Edit 
      rs!J_PersonIndex = Right("00" + s, 2) 
      rs!J_CaseNo = rs!J_CaseNum & rs!J_Index 
      rs!J_PersonID = rs!J_CaseNo & rs!J_VehicleIndex & rs!J_PersonIndex 
      rs.Update 
      rs.MoveNext 
      rs1.MoveNext 
     End If 
    End If 

    i = i + 1 
    SysCmd acSysCmdUpdateMeter, i 

    If (i Mod 1000) = 0 Then Stop 
Wend 

在此先感謝

+5

什麼是你的問題/什麼是你遇到的麻煩現有的表? SO不是代碼寫入服務。 –

+0

組合可以重複嗎?還是它們是唯一的?你想讓J_PersonIndex成爲一個靜態數字,還是每次查詢都會產生? –

+0

J_PersonIndex將是一個靜態值。這是一次性更新。 – Draco

回答

1

確定,所以希望每個組的情況下/指數/人的計數器。我會做這樣的事情來獲得一個獨特的人物ID。

SELECT ROW_NUMBER() OVER (partition BY caseNum,[index] order by [index])  
    AS personId , caseNum, [index], personName FROM table 

然後你可以使用這個數據集插入到一個新表或更新從該查詢(這是一個修改的命令)

+0

有160,000條記錄需要更新。 – Draco

+0

我是新來編寫SQL代碼,從來沒有聽說過交叉連接。這是我正在使用的一張桌子。我使用兩個記錄集的原因是爲了測試在兩列中發生更改的時間,因此我可以將personIndex重置爲01,以供新組使用。 例如: CaseNum指標名稱PERSONID 史密斯01 10001 001帕特02 10001 002 allice 01 10002 001史密斯01 – Draco

+1

@ user7355774 確定,所以希望每個組的情況下/指數/人的計數器。 我會做這樣的事情來獲得一個獨特的人員ID。 '代碼 SELECT ROW_NUMBER() OVER(PARTITION BY caseNum,[指數]爲了通過[指數])AS PERSONID, caseNum,[指數],PERSONNAME FROM表 ' 然後可以使用此數據集從此查詢插入新表或更新現有表(這是另一步) – cjr