我需要使用SQL Server 2008自動生成訂單確認編號並將其顯示在網頁上。我設置了一個名爲confirmationnumber的列,併爲其分配了一個唯一標識符。這是做到這一點的正確方法嗎?自動生成確認編號
自動生成確認編號
回答
唯一標識符將生成GUID。這些字符長度爲32個字符,並不友好(想想客戶用他的參考號碼撥打電話的場景)。一個GUID如下所示:
f56c41dd-7811-461a-9378-e3a2b095aafc
我想看看使用帶屬性集合一個int,這將至少是一個易於使用的數字。
CREATE TABLE order (order_id int not null IDENTITY(1,1), customer_code varchar(50) NOT NULL);
然後插入的順序爲:然後
DECLARE @order_id int;
INSERT INTO order(customer_code) VALUES('dotnethacker')
SET @order_id = SCOPE_IDENTITY()
@order_id將包含新插入的ID。
這真的是一個比技術問題更多的商業問題。但是,當我們在它上面..我認爲這個問題的最佳方法是將順序(縮進)訂單號碼轉換爲base36字符串。您最後會看到一個人性化的好訂單號碼(想想西南航空公司),同時用順序號碼混淆潛在的安全問題。
只是我的兩分錢,
這裏是base36算法http://en.wikipedia.org/wiki/Base_36
「同時使用連續訂購號來混淆潛在的安全問題。」要麼存在安全問題,要麼沒有。 Base36編碼根本沒有幫助。 – CodesInChaos 2011-05-08 22:57:16
我用的GUID用於此目的的鏈接。不過,我喜歡有一個更簡單的版本,在眼睛上更容易一些。這裏是會出現亂碼的GUID的函數:
public static string GenerateKey()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
結果看起來是這樣的:
38f50037b1b56c97
散列是安全的和獨特的。
問題要求在SQL Server 2008中生成數字的選項。這需要作爲服務器上的託管DLL或在應用程序代碼中生成來安裝和執行。這個數字對於客戶通過訂單查詢向客戶服務人員讀取仍然是滿口的。 – 2011-05-08 23:33:14
他的問題說「與」不在「。」但是,他想要處理數字的生成有點不清楚。這篇文章的任何答案都將根據需求解決問題。 – rboarman 2011-05-09 02:18:59
如果您的項目少於約40億,這只是平均值。依靠64位散列的唯一性在實踐中可能是一個問題。 – CodesInChaos 2011-05-09 09:56:41
您可以使用默認的NEWID()創建uniqueidentifier類型的列。
CREATE TABLE [dbo].[TestTable](
[id] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [DF_TestTable_id] DEFAULT (NEWID()) FOR [id]
爲了趕上新插入的GUID,您可以使用OUTPUT子句:
INSERT INTO TestTable (id)
OUTPUT inserted.id
VALUES(DEFAULT)
UPDATE: 要生成的10位數字和字母的代碼是沒有問題的。保證唯一性的問題。要做到這一點,你應該檢查你的表,如果這個代碼是真正獨特的。
; with numbers as
(SELECT ROW_NUMBER() OVER(ORDER BY o1.object_id,o2.object_id) Num,
LEFT(REPLACE(CAST(NEWID() as nvarchar(40)),'-',''),10) Code
FROM sys.objects o1, sys.objects o2)
SELECT TOP 1 Code FROM numbers where NOT EXISTS(SELECT code FROM [Table])
- 1. 生成自定義自動編號
- 2. 在MySQL中生成自動編號
- 3. 自動生成的編號在RavenDB
- 4. 確認UITextview自動完成
- 5. MS Access - 如何使用子自動編號生成自動編號
- 6. 自動生成號碼
- 7. 回覆:自動生成自動增量編號
- 8. 自動確認
- 9. 讀取TCP確認編號
- 10. 生成主鍵和確認
- 11. 生成刪除確認框
- 12. 在CQ中生成自動增量唯一編號的策略
- 13. 爲不同分行生成不同的自動編號
- 14. CRM中的自動生成編號機會
- 15. 如何生成自動編號具有唯一值
- 16. 在數據庫中生成自動唯一編號
- 17. 如何生成自動編號在Teradata的SQL
- 18. 自動生成的每次更新的唯一編號列
- 19. 如何獲取SQL插入生成的自動編號
- 20. 以自動遞增6-8模式生成唯一編號mysql
- 21. 使用Java生成自動增量編號
- 22. 在SQL Server中生成重複的自動編號
- 23. 當ID爲非自動編號時生成下一個ID
- 24. 如何在sharepoint中自動生成文件編號?
- 25. Laravel 5自動生成表格編號/標識符
- 26. 如何自動生成唯一的debitnote編號
- 27. 自動生成的標題編號由TinyMCE的
- 28. 如何使用jsp生成自動編號?
- 29. 在Acumatica中自動生成號碼
- 30. 自動生成號碼AS/400
我永遠不會使用身份確認號碼,用戶可以看到。因爲它們是連續的,所以它們可以很容易地被猜測出來,並且存在安全風險。 – rboarman 2011-05-08 22:59:16
好吧,如果您執行一項檢查,確認客戶與他們正在引用的訂單ID相關聯,那麼您可以消除安全風險。 – 2011-05-08 23:10:32
這隻取決於您需要解決方案的安全程度爲 – rboarman 2011-05-08 23:11:45