2010-10-10 60 views
2

我有一個名爲'Customer'的表。在SQL Server 2000中自動生成函數

此表包含名爲'CustomerNo'的每個客戶的唯一標識字段。 它應該是格式:首先是一個字母從A-Z開始。

然後一個四位數字從1-9999開始,下一個是從1-999開始的三位數字。這是一個獨特的字段。所以它不應該重複表Customer。

例如:A1000-100。

有沒有什麼函數可以生成這種格式?

Table structure 
----------------------- 
CustomerID   CustomerName   CustomerNo 

1     John     A1000-100 
2     Sajan     A1001-100 
+0

是你的例子正確或應該是2 Sajan A1000-101? – 2010-10-10 05:23:22

+0

示例不能正確,因爲Sajan的第一個數字是> 9999. – 2010-10-10 05:27:00

+0

我已更正了我的示例。 – Adu 2010-10-10 05:33:38

回答

2

你可以只使用一個正常的自動遞增標識列和下式(可能在一個出列)來映射該顯示格式。

CHAR((id-1)/9999/999 + 65) + 
RIGHT('0000' + CAST(1 + (id-1)%(999*9999)/999 AS VARCHAR(4)),4) + 
'-' + 
RIGHT('000' + CAST(1 + (id-1)%999 AS VARCHAR(3)),3) 

這可以避免您必須自己處理任何併發問題。

+0

我的格式從這開始:A0001-001。在上面的查詢中沒有alphabet.i我沒有使用任何ID – Adu 2010-10-10 08:09:12

+0

@Adu - 我建議你添加一個ID列,並讓SQL Server負責自動增加它。這避免了你在分配這些ID時必須自己處理併發問題。字母字符由「CHAR」功能添加。例如(@ id-1)/ 9999/999 + 65)+ RIGHT('0000'+ CAST(1 +(@ id-1)%(999 * 9999)/999 AS VARCHAR(4)),4)+' - '+ RIGHT('000'+ CAST(1 +(@ id-1)%999 AS VARCHAR(3)),3)' – 2010-10-10 08:11:17