2017-04-08 19 views
0

我正在使用這個問題How to automatically generate unique id in sql server的答案來創建一個表的自定義ID。它完美的工作。
現在我有一個列,它包含的值如UID00000001UID00000002等。假設此列中的最後一個值爲UID00000003。現在我想通過C#在我的一個.aspx頁面中計算尚未插入的行的值。在這種情況下,UID00000004。我怎樣才能達到這個價值? 任何幫助,將不勝感激。 謝謝。如何計算尚未被插入的行(自定義id)?

+0

在行被實際保存後顯示這些值是否可以接受?除非您在應用程序中生成標識符,否則沒有人可以告訴您使用標識或序列進行保存時您會收到哪些ID。如果您確信只有您的應用程序在該表中執行插入,則會發生這種情況。 – Alexei

+1

由於插入可能會失敗,因此無法預先計算該值,如果發生這種情況,您將得到錯誤的編號,或者某個其他進程可能會在計算時間和實際插入時間之間插入一條記錄。 –

回答

0

您需要執行這個查詢得到這會爲表生成的下一個身份:

SELECT IDENT_CURRENT('table_name')+1; 

對於您的情況下,將與下一個標識級聯其它一些信息,以便查詢會像這樣:

SELECT 'UID' + RIGHT('00000000' + CAST(IDENT_CURRENT('table_name')+1 AS VARCHAR(8)), 8) 

當然,您需要編寫C#代碼以將該查詢發送到SQL Server。

話雖如此,請牢記這一點:當您從該調用中獲取值並保持該值時,如果在您持有該值時將記錄插入該表中,則值不再爲下一個值。

如果您在申請中插入記錄後需要相同的值,請參考this答案。

+0

CodingYoshi請閱讀我提供鏈接問題的答案。此列不是自動增量列。 –

+0

除此之外,我需要這個值只是爲了顯示的目的,我不會再發送這個值到SQL服務器。 –

+0

@ElhamKohestani根據這個答案它是一個自動增量列(它是身份值和一些其他字符的組合)。 – CodingYoshi

1

如果不需要在數據庫級別生成這些標識符(例如其他一些進程在那裏插入記錄),則可以在應用程序中預先生成它們。類似以上內容:

class Generator 
{ 
    public static int UniqueId = 0; 

    public static int GetNextId() 
    { 
      return Interlocked.Increment(ref UniqueId); 
    } 
} 

然後,您的代碼可以預先分配這些標識符,並對這些字符串進行格式化。如果多個用戶訪問相同的功能,他們將收到其他標識符。但是,如果沒有(成功)執行保存操作,則這些標識符將丟失。

+0

我不需要對這個值做任何事情。我只是爲了某些顯示目的而需要它。無論如何,感謝您發佈您的寶貴時間。 –