SQL 服务器脚本循环遍历每条记录并更新它
SQL Server script loops through each record and updates it
如何在 T-SQL 中编写等效的 SQL 脚本?
我已经在 MS Access 中编写了这段代码来编辑记录 - 我怎样才能在 SQL 服务器中做同样的事情?
对于 J_CaseNum
和 J_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
提前致谢
好的,所以你想要在每组 case/index/person 中有一个计数器。我会做这样的事情来获得一个独特的人 id。
SELECT ROW_NUMBER() OVER (partition BY caseNum,[index] order by [index])
AS personId , caseNum, [index], personName FROM table
然后您可以使用此数据集插入到新的 table 或更新现有的 table 从此查询(这是修改后的命令)
如何在 T-SQL 中编写等效的 SQL 脚本?
我已经在 MS Access 中编写了这段代码来编辑记录 - 我怎样才能在 SQL 服务器中做同样的事情?
对于 J_CaseNum
和 J_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
提前致谢
好的,所以你想要在每组 case/index/person 中有一个计数器。我会做这样的事情来获得一个独特的人 id。
SELECT ROW_NUMBER() OVER (partition BY caseNum,[index] order by [index])
AS personId , caseNum, [index], personName FROM table
然后您可以使用此数据集插入到新的 table 或更新现有的 table 从此查询(这是修改后的命令)