SQLServer查询:我需要根据查询增加一个整数,并设置它
我面临以下挑战:我在VB.NET中有一个SQL命令,用于在SQL Server表上设置唯一ID 看起来是这样的:SQLServer查询:我需要根据查询增加一个整数,并设置它,sql,sql-server,vb.net,visual-studio,Sql,Sql Server,Vb.net,Visual Studio,我面临以下挑战:我在VB.NET中有一个SQL命令,用于在SQL Server表上设置唯一ID 看起来是这样的: Public Async Function CreateWiedervorlagenID() As Threading.Tasks.Task Dim sqlquery As String = "select distinct [id_doc], [label], [date] from [reminder]" Dim i As Integer = 0 Us
Public Async Function CreateWiedervorlagenID() As Threading.Tasks.Task
Dim sqlquery As String = "select distinct [id_doc], [label], [date] from [reminder]"
Dim i As Integer = 0
Using dbConn As New SqlConnection With {.ConnectionString = conStr}
If Not dbConn.State.Equals(ConnectionState.Open) Then Await dbConn.OpenAsync()
Using dbCommand As New SqlCommand With {.CommandText = sqlquery, .Connection = dbConn}
Using dbReader As SqlDataReader = Await dbCommand.ExecuteReaderAsync
If dbReader.HasRows.Equals(True) Then
While Await dbReader.ReadAsync
i += 1
Await DoChanges(i, CInt(dbReader.Item(0)), dbReader.Item(1).ToString(), dbReader.Item(2).ToString())
End While
End If
dbReader.Close()
End Using
End Using
If Not dbConn.State.Equals(ConnectionState.Closed) Then dbConn.Close()
End Using
End Function
Private Async Function DoChanges(id_wv As Integer, id_doc As Integer, label As String, r_date As String) As Threading.Tasks.Task
Dim sqlquery As String = $"update [reminder] set [id_wv] = {id_wv} where [id_doc] = {id_doc} and [label] = '{label}' and [date] = '{r_date}'"
Using dbConn As New SqlConnection With {.ConnectionString = conStr}
If Not dbConn.State.Equals(ConnectionState.Open) Then Await dbConn.OpenAsync()
Using dbCommand As New SqlCommand With {.CommandText = sqlquery, .Connection = dbConn}
Try
Await dbCommand.ExecuteScalarAsync
Catch ex As DbException
Debug.WriteLine($"Fehler bei DoChanges; Fehlerbeschreibung: {ex.Message}")
MsgBox($"Fehler bei DoChanges; Fehlerbeschreibung: {ex.Message}")
End Try
End Using
If Not dbConn.State.Equals(ConnectionState.Closed) Then dbConn.Close()
End Using
End Function
如果可能的话,我应该把这段代码重写成SQL。不幸的是,我仍在接受培训,对SQL知之甚少,特别是因为这似乎是一个相当困难的SQL命令。我当然非常感谢您的帮助。您可以使用
行数
方法获取索引
,然后只需更新您的id\u wv列即可
update [reminder] set [id_wv] = IndexNumber from [reminder] as table1 inner join
(select [id_doc], [label], [date], ROW_NUMBER() over(order by id_doc) as IndexNumber from [reminder]
group by [id_doc], [label], [date]) as table2 on table1.[id_doc] = table2.[id_doc]
and table1.[label] = table2.[label] and table1.[date] = table2.[date]
. . 你也应该翻译标题。不太确定你想在这里完成什么。但我认为您只是想更新每一行并给它们一个增量值?如果@SeanLange是正确的,
IDENTITY
或row\u NUMBER
将是一个更好的基于集合的解决方案,而不是一次痛苦地更新每一行。非常感谢您,Ranjit!我尝试了你的解决方案,效果非常好!但老实说,我自己永远也想不到。我想我还不知道SQL的关键词。所以,我现在从您的解决方案中学习:)我想您对我理解SQL做出了很大贡献。谢谢!看来你找到了解决办法。你解决了当前的问题了吗?如果是这样,建议您将其标记为答案,因为这将对其他人有利。