我可以将SOF/2015/01
存储为我的ID吗?我可以像通常的主键一样自动增加01
吗?
答案 0 :(得分:2)
我可以将SOF / 2015/01存储为我的ID
答案:是的,你可以
我可以像通常的主键一样自动递增01。
答案:不,你不能
自动增量只能增加数字。
你必须手动。
您可以使用触发功能生成您想要的自动递增数字
create function NextCustomerNumber()
returns char(5)
as
begin
declare @lastval char(5)
set @lastval = (select max(customerNumber) from Customers)
if @lastval is null set @lastval = 'C0001'
declare @i int
set @i = right(@lastval,4) + 1
return 'C' + right('000' + convert(varchar(10),@i),4)
end
然而,这可能会导致一些问题:
您可以从this
了解更多信息答案 1 :(得分:1)
使用字符串' SOF / 2015'创建一个两列唯一主键。作为第一部分,自动递增整数作为第二列。您可以使用返回字符串的函数组合这两列,以便为您提供组合键。对于语法糖,您可以使用函数在表上创建一个视图,将键组合到一个视图列中。
答案 2 :(得分:0)
您可以使用NCHAR
或NVARCHAR
类型作为主键,假设任何可变大小的列都不使用MAX
,并且数据不会使用"01"
。 t超过索引的最大允许大小。
至于使用它作为自动增量列,它不会起作用。 SQL很聪明,但不是那么的。
我建议将该字符串拖放到两个或三个单独的列中,以便您可以将IDENTITY
部分存储为单独的UNIQUE
' d列。但肯定这是一个你必须自己解决的设计问题。
另一个解决方案将是一个触发器,但我可能会犹豫是否使用这样的东西作为主键。使用数字类型在很多方面都要好得多,尤其是当您必须在其他地方引用表时。您始终可以在字符串表示中应用{{1}}索引。