Board logo

標題: [轉貼] SQL自動編號 [打印本頁]

作者: 傘蜥蜴    時間: 2011-11-9 10:13     標題: SQL自動編號

資料來源:http://marchlifeshow.blogspot.com/

寫程式常需要用到流水號,可以用程式寫,不過比較麻煩
底下的教學是在SQL內寫一個函式
以後要用到就只要呼叫就可以了~挺方便的~

要使用 MSSQL 的自動編號欄位, 只需要簡單的設定識別規格中 Is Identity, 就可以很容易的產生一個自動編號欄位。不過有時候這樣的自動編號並不能滿足所有的需求。例如客戶可能會要求訂單編號是加上日期之類的做為訂單的開頭。例如 2008/11/4 第一筆訂單的訂單編號要是 2008110400001, 第二筆就要是 2008110400002, 11/5 的又要重 1 開始編起 2008110500001, 2008110500002...。
這時候利用自動編號欄位就不夠使用了。

這時候可以利用函數的方式來解決這個問題。下面就直接做一個範例。
首先我們先建立一個資料表 Orders
  1. CREATE TABLE [dbo].[Orders](
  2.   [ID] [int] IDENTITY(1,1) NOT NULL,
  3.   [OrderID] [nvarchar](20),
  4.   [CustomerID] [int],
  5.   [OrderDate] [smalldatetime],
  6.   CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
  7.   (
  8.     [ID] ASC
  9.   )
  10. )
複製代碼
再來, 我們先建立一個函數 GetOrderID():
  1. CREATE FUNCTION GetOrderID()
  2. RETURNS nvarchar(20)
  3. AS
  4. BEGIN
  5.   DECLARE @OrderID nvarchar(20)
  6.   DECLARE @DT nvarchar(20)
  7.   SELECT @DT = convert(varchar(10),getdate(),112)
  8.   SELECT @OrderID= @DT + right('0000' + ltrim(isnull(max(cast(right(OrderID, 5) as int)),0)+1), 5) from Orders where left(OrderID, 8) = @DT
  9.   RETURN @OrderID
  10. END
  11. GO
複製代碼
* 新建立的函數, 你可以在資料庫下的「可程式性 / 函數 / 純量值涵數」中找到
最後, 將資料表與函數整合的方法是進入設計資料表。在 OrderID 欄位的「預設值或繫結」輸入 dbo.GetOrderID()。此時在資料表中再新增資料時, 訂單編號 OrderID 欄位, 就會產生我們想要的編號方式了。

資料來源:http://marchlifeshow.blogspot.com/




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)