2013-08-29 53 views
1

我有一個ID,我在asp.net vb應用程序和格式爲MM/YYYY/##的SQL Server中創建,其中#是一個整數。當用戶生成表單時,整數在整個月份遞增1,因此當前爲08/2013/39如何在每個月初將自定義ID重置爲1

我用這個代碼如下所示

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。我如何去做這件事?

+0

你試過了什麼?如果日等於1,則rfa_number = 1聽起來不太困難。將(字符串)日期轉換爲日期類型有問題嗎? – varocarbas

+0

問題是,可能會在第1天提交多個表單,因此第一個表單必須具有值1,其餘的表單會從該表中增加 – Silentbob

+0

我知道任何rfa_number更改都會立即提交給數據庫,它呢? – varocarbas

回答

1

從表中選擇max(記錄),並將currentDate與記錄的Date進行比較。當他們不同時。重置ID = 1。 使用上面的答案,我用下面的代碼一些深入研究的結合像這樣

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()) 
+0

我想這就是我要走的路。謝謝 – Silentbob

+0

感謝您的聲譽。我來自中國,我的英語不好,我幾乎不會學習英語。:) – very9527

0

的SQL。這解決了我的查詢。

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 
0

@ very9527的方法工作(+1),但日期部分的操作很笨拙。在原有基礎上的代碼的另一種選擇的概要:

  • 從數據庫中獲取的最新值,get_end_rfa
  • 最左邊的7個字符與「現在」的值進行比較,rfa_date
  • 如果他們是平等的,它是同一年/月,第一個項目已經創建,使用遞增值
  • 如果它們不相等,它是一個新的月份,並且該月份的「第一個」項目尚未設置,因此已重新設置它與1

您是否需要擔心併發性?如果兩個實例同時嘗試添加「下一個」值,會發生什麼?

+0

我確實不必擔心併發性,但我已經在代碼中滿足了它的要求。它沒有我想要的那麼幹淨,但它完成了這項工作。 – Silentbob

相關問題