如何在每月月初将自定义ID重置为1

时间:2013-08-29 09:43:06

标签: sql sql-server vb.net

我有一个ID我在asp.net vb app和SQL Server中创建的格式为MM/YYYY/##,其中#是整数。当用户生成表单时,整数在整月中递增1,因此目前它是08/2013/39

我用于此的代码如下

    Dim get_end_rfa As String = get_RFA_number()
    Dim pos As Integer = get_end_rfa.Trim().LastIndexOf("/") + 1
    Dim rfa_number = get_end_rfa.Substring(pos)
    Convert.ToInt32(rfa_number)
    Dim change_rfa As Integer = rfa_number + 1

    Dim rfa_date As String = Format(Now, "MM/yyyy")

    Dim rfa As String = rfa_date + "/" + Convert.ToString(change_rfa)

    RFA_number_box.Text = rfa

Public Function get_RFA_number() As String
    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("AnalyticalNewConnectionString").ConnectionString)
    conn.Open()
    Dim cmd As New SqlCommand("select TOP 1 RFA_Number from New_Analysis_Data order by submitted_date desc", conn)
    Dim RFA As String = (cmd.ExecuteScalar())
    conn.Close()
    Return RFA
End Function

我需要在每个月的月初将整数重置为1。我该怎么做?

3 个答案:

答案 0 :(得分:1)

从表中选择max(记录),并将currentDate与记录的Date进行比较。当他们不同。重置ID = 1。     像这样的SQL

select ID, recordDate 
from TABLE
where ID = (select max(ID) from TABLE) 
where datename(YYYY ,getdate()) = datename(YYYY ,recordDate()) 
and datename(MM ,getdate()) = datename(MM ,recordDate()) 

答案 1 :(得分:0)

结合上面的答案和一些进一步的研究我正在使用下面的代码。这解决了我的疑问。

declare @mydate as date

    set @mydate = CONVERT(char(10), GetDate(),103)
    if convert(char(10), (DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)), 126) = CONVERT(char(10), GetDate(),126)
    select right(convert(varchar, @mydate, 103), 7) + '/01'
    else
    select TOP 1 RFA_Number 
    from New_Analysis_Data 
    order by submitted_date desc

答案 2 :(得分:0)

@ very9527的方法有效(+1),但是日期部分操作很尴尬。基于原始代码的另一个选项的概述:

  • 从数据库中获取最新值get_end_rfa
  • 将最左边的7个字符与“now”值rfa_date
  • 进行比较
  • 如果相等,则为同一年/月,第一项已创建,使用递增值
  • 如果它们不相等,那么这是一个新的月份,并且该月份的“第一”项目尚未设置,因此将其重新设置为1

你需要担心并发吗?如果两个实例同时尝试添加“下一个”值会发生什么?