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

Sql 如何在每个月初将自定义ID重置为1,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我在asp.net vb应用程序和SQL Server中创建了一个ID,其格式为MM/yyy/其中的是整数。随着用户生成表单,该整数在整个月内递增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.Sub

我在asp.net vb应用程序和SQL Server中创建了一个ID,其格式为MM/yyy/其中的是整数。随着用户生成表单,该整数在整个月内递增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。如何执行此操作?

从表中选择maxrecord,并将当前日期与记录的日期进行比较。当他们不一样的时候。重置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()) 

从表中选择maxrecord,并将currentDate与记录的日期进行比较。当他们不一样的时候。重置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()) 

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

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

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

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

@very9527的方法在+1时有效,但datepart操作非常笨拙。基于原始代码的另一个选项的概要:

从数据库中获取最新值,获取\u end\u rfa 将最左边的7个字符与现在的值rfa\U date进行比较 如果它们相等,则是相同的年/月,第一个项目已创建,请使用递增值 如果它们不相等,则这是一个新的月份,并且该月份的“第一个”项目尚未设置,因此使用1重新设定
您必须担心并发性吗?如果两个实例同时尝试添加“下一个”值,会发生什么情况?

@very9527的方法在+1时有效,但datepart操作非常笨拙。基于原始代码的另一个选项的概要:

从数据库中获取最新值,获取\u end\u rfa 将最左边的7个字符与现在的值rfa\U date进行比较 如果它们相等,则是相同的年/月,第一个项目已创建,请使用递增值 如果它们不相等,则这是一个新的月份,并且该月份的“第一个”项目尚未设置,因此使用1重新设定
您必须担心并发性吗?如果两个实例同时尝试添加“下一个”值,会发生什么情况?

您尝试了什么?如果一天等于1,那么将rfa_数设为1听起来并不太困难。将字符串日期转换为日期类型是否有问题?问题是,可能会在第1天提交多个表单,因此第一个表单的值必须为1,其余的值必须从1开始增加。我知道rfa_编号的任何更改都将立即提交给DB,不是吗?也就是说。。。如果day=1,则更改\u rfa=1并提交给DB。但我明白这就是你正在做的;当你把DeangeEyrFA做为整数=rFaFix++ 1时,我想必须将转换EFRFA提交给DB以允许下一次阅读来考虑数字的最后版本,不是吗?你尝试了什么?如果一天等于1,那么将rfa_数设为1听起来并不太困难。将字符串日期转换为日期类型是否有问题?问题是,可能会在第1天提交多个表单,因此第一个表单的值必须为1,其余的值必须从1开始增加。我知道rfa_编号的任何更改都将立即提交给DB,不是吗?也就是说。。。如果day=1,则更改\u rfa=1并提交给DB。但我明白这就是你正在做的;当你把DeangeEyrFA做为整数=rFaFix++ 1时,我想必须将转换EFRFA提交给DB以允许下一次阅读来考虑数字的最后版本,不是吗?我想这就是我要去的方式。谢谢你的名声。我来自中国,我的英语不好,我会努力学习英语。我想这就是我要走的路。谢谢你的名声。我来自中国,我的英语不好,我会努力学习英语。我确实需要担心并发性,但我已经在代码中满足了它。它没有我想要的那么干净,但是它完成了任务。我确实需要担心并发性,但我已经在代码中满足了它。虽然没有我想要的那么干净,但它确实很管用。