SQLServer查询:我需要根据查询增加一个整数,并设置它

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

我面临以下挑战:我在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

    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做出了很大贡献。谢谢!看来你找到了解决办法。你解决了当前的问题了吗?如果是这样,建议您将其标记为答案,因为这将对其他人有利。