我正在使用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
);
但我收到以下错误:
表'tb'中的计算列'cust_id'无法保留,因为该列是非确定性的。
如何解决这个问题?
答案 0 :(得分: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文档中找到信息。)