在vb.net中自动增加nvarchar值

在vb.net中自动增加nvarchar值,vb.net,increment,nvarchar,Vb.net,Increment,Nvarchar,我的表中有一个UserID字段,我需要在我的应用程序中获取该值,每当我想添加新记录时,它应该按值“1”递增 这就是我试图从我的表中获取最后一个ID的方法 例如,我有一个值为“A000”,我需要将该值增加'1',使其变为“A001”,依此类推。'A999'之后,正如PinnyM所指出的,'A1000' 我不想从数据库中编写任何存储过程或任何其他方式。我希望使用现有代码以更简单的方式来编写 Dim strConnection As String = "Data Source=.\SqlExpres

我的表中有一个UserID字段,我需要在我的应用程序中获取该值,每当我想添加新记录时,它应该按值“1”递增

这就是我试图从我的表中获取最后一个ID的方法

例如,我有一个值为“A000”,我需要将该值增加'1',使其变为“A001”,依此类推。'A999'之后,正如PinnyM所指出的,'A1000'

我不想从数据库中编写任何存储过程或任何其他方式。我希望使用现有代码以更简单的方式来编写

 Dim strConnection As String = "Data Source=.\SqlExpress;Initial Catalog=Subscription;Integrated Security=True"
 Dim con As New SqlConnection(strConnection)
 con.Open()
 Dim comm As New SqlCommand
 comm.CommandText = "SELECT MAX(UserID) FROM Customers"
 comm.Connection = con
 Dim MaxUserID As Object = comm.ExecuteScalar()
 txtID.text=MaxUserID

基于上述意见,我提议:

comm.CommandText = "SELECT 'A' + RIGHT('000', CAST((MAX(primary_key) + 1) as nvarchar(255)), 3) FROM Customers"
它的作用是:

  • 获取最后一个键并添加1
  • 投给女皇
  • 如有必要,用0填充(最多3处)

我绝对不会尝试使用基于字符的键来执行此操作,因为
UserID
似乎已经生成。另外,请注意,这不是原子连接,也不能保证另一个连接不会在您插入行之前插入。所以它实际上返回了一个乐观的值,这个值可能实际上并不正确。如果这对你不起作用,那么考虑让身份为你做它的工作,并在使用<代码> StopeSyIdId()/<代码> < /P> < P>创建行之后获取值。
Public Function IncrementString(ByVal Sender As String) As String
    Dim Index As Integer
    For Item As Integer = Sender.Length - 1 To 0 Step -1
        Select Case Sender.Substring(Item, 1)
            Case "000" To "999"
            Case Else
                Index = Item
                Exit For
        End Select
    Next
    If Index = Sender.Length - 1 Then
        Return Sender & "1" '  Optionally throw an exception ?
    Else
        Dim x As Integer = Index + 1
        Dim value As Integer = Integer.Parse(Sender.Substring(x)) + 1
        Return Sender.Substring(0, x) & value.ToString()
    End If
End Function

达到“A999”后,应该有什么行为?它总是后面跟一个数字的“A”字吗?作为记录,像这样构建主键是一个坏主意-坚持递增整数…@PinnyM首先感谢你对我的问题的看法,是的,它应该总是提到“a”作为第一个字母,然后它应该增加值“1”…就像你说的,在“A999”之后它应该变成“A1000”。啊哈,你掉进陷阱了!:)您会注意到,“A1000”的值将比“A999”的值“低”,因为它是基于字符的-因此
MAX(UserID)
不起作用。即使有办法解决这个问题,你也会彻底摧毁任何试图帮助你的索引。您需要使用这样的主键有什么原因吗?我能看到的唯一替代方法是使用大量的0,这样您就永远不会达到换行条件…这不是我表中设置的主键。这只是为了知道公司提供的cust值以供将来参考。那么UserID不是Customers表的主键吗?那是什么,你为什么不使用它呢?请选民解释一下他们的动机好吗?