2016-07-27 76 views
0

我正在使用SQL Server 2008 R2。每當有新客戶註冊時,我都想創建一個自動生成的客戶ID。客戶ID應採用以下格式如何使計算列成爲持久的列?

Customer ID = 
    current year (4 digit) + 
    current month (2 digit) + 
    unique number (4 digit). 

例子:2012055001

我寫了一個查詢,如下所示:

create table tb 
(
    id int identity(1000, 1), 
    cust_id as CONVERT(VARCHAR(4), DATEPART(YYYY, GETDATE())) + 
       SUBSTRING(CONVERT(nvarchar(6), GETDATE(), 112), 5, 2) + 
       CONVERT(VARCHAR(4), id) persisted primary key 
); 

但我發現了以下錯誤:

Computed column 'cust_id' in table 'tb' cannot be persisted because the column is non-deterministic.

我該如何解決這個問題?

+1

'GETDATE'是非確定性的,因此您不能在此上下文中使用它。所以,這是@KenWhite建議的觸發器,還是在插入之前在變量中構造值。 –

+0

@KenWhite你應該做出答案。 – DeanOC

+0

當您在一個月內獲得1,0001個新客戶時會發生什麼?不要這樣做。您的內部客戶ID應該是一個身份,然後按照您所描述的方式生成您的「視覺」客戶號碼。 –

回答

3

你很困惑結構數據。您正在嘗試使用數據作爲結構類型來創建表格,並且這顯然無法工作。

列名將是cust_id,但列類型必須是有效的SQL Server數據類型之一(在這種情況下最有可能是CHAR(10),因爲它是固定寬度,並且沒有可能的Unicode字符) 。然後

CREATE TABLE tb(id int identity(1000, 1), cust_id Char(10)); 

你自動生成的數據將被插入到列,很可能是由一個ON INSERT觸發。 (如何創建觸發器是一個完全不同的主題;可以在大多數SQL教程或書籍或SQL Server文檔中找到信息。)