0

我想有一个学生 ID 与一年的最后 2 位数字和一个字符串 -001 示例 13-001 并读取表中的最后一个值 示例 13-002 是表中的最后一个值它如何变为 13-003当表单加载时。我在表 13-001 上有一个值,我一直在尝试这个代码,但它给了我 14 而不是 13-002

 Dim dr As SqlDataReader
    Dim Cmd As New SqlCommand
    con.Open()
    With Cmd
        .Connection = con
        .CommandText = "SELECT * FROM tbl_student ORDER BY Student_no DESC"
    End With
    dr = Cmd.ExecuteReader

    If dr.Read Then
        lblstudno.Text = Val(dr.Item(0)) + 1

    End If

    con.Close()

谢谢希望你理解

4

1 回答 1

0
INSERT INTO
    students
( student_id ) VALUES
(
    CAST( ( YEAR( GETDATE() ) % 100 ) + 1 AS varchar(2) ) + '-' + 
    CAST( 
           SELECT TOP 1
               CAST( RIGHT( student_id, 3 ) AS int ) + 1
           FROM
               students
           ORDER BY
               student_id DESC

    AS varchar(3) )
)

请注意,如果您达到 999 名学生,这将失败。还有一个潜在的竞争条件,除非您在表上执行某种锁定(请参阅事务隔离)。

我的帖子还演示了为什么IDENTITY键通常是一个好主意,而不是自己滚动(假设你想使用这个系统作为你的主键)。

于 2013-03-31T04:25:26.220 回答