【发布时间】:2015-02-25 04:49:45
【问题描述】:
我可以将SOF/2015/01 存储为我的ID,我可以像通常的主键一样自动增加01 吗?
【问题讨论】:
-
请访问here获取解决方案。
标签: c# sql-server-2008
我可以将SOF/2015/01 存储为我的ID,我可以像通常的主键一样自动增加01 吗?
【问题讨论】:
标签: c# sql-server-2008
我可以将 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了解更多信息
【讨论】:
创建一个两列唯一主键,其中字符串“SOF/2015”作为第一列,自动递增整数作为第二列。您可以使用返回字符串的函数组合两列,从而为您提供组合键。对于语法糖,您可以使用函数在表上创建一个视图,将键组合到一个视图列中。
【讨论】:
您当然可以使用NCHAR 或NVARCHAR 类型作为主键,前提是任何可变大小的列都不使用MAX,并且数据不超过索引的最大允许大小。
至于将其用作自动递增的列,那是行不通的。 SQL 非常聪明,但并不完全如此。
我建议将该字符串拉入两个或三个单独的列,以便您可以将 "01" 部分存储为单独的 IDENTITY'd 列。但可以肯定的是,这是一个您必须自己解决的设计问题。
另一种解决方案是触发器,但我通常会犹豫是否使用这样的东西作为主键。使用数字类型在许多方面都好得多,尤其是当您必须在其他地方引用表格时。您始终可以在字符串表示上应用 UNIQUE 索引。
【讨论】: