创建我的自定义唯一键

问题描述 投票:1回答:3

我的SQL Server中有一个表。目前,我使用标识列来唯一标识每条记录,但我不断变化的需求需要以特定格式生成的唯一密钥(由我的客户端指定)。我试图通过将一个唯一的整数(在每次插入时递增)附加到指定的格式来生成我的应用程序中的唯一键,我的客户端对我当前的解决方案不满意。如果我可以被引导到更好的技术来解决我的问题而不是我当前的解决方案,那将是很棒的。

格式如下:

PRN-YEAR-MyAppGeneratedInt
sql sql-server tsql
3个回答
1
投票

您可以创建一个SEQUENCE来满足您在SQL Server 2012中引入的目的。有关SEQUENCE的详细解释可以在here找到。

希望这可以帮助 :)

根据您在评论中指定的格式,我还将为您提供一个示例,说明如何使用序列解决问题:

首先创建一个如下序列:

CREATE SEQUENCE SeqName
AS int
START WITH 1
INCREMENT BY 1
CYCLE 
CACHE 

接下来,您可以使用此序列在您的应用程序中生成所需的唯一键。

  1. 获取序列的下一个值“为SeqName选择NEXT VALUE;”
  2. 使用如下值创建一个字符串:String key= "PRN"+year+SeqValue;
  3. 最后将此字符串存储为Insert语句中的唯一键。

您可以根据需要编写应用程序代码:)


4
投票

基本上,保持当前的identity列。这是您识别和管理表中行的最佳方式。

如果客户端需要另一个唯一密钥,则添加它。据推测,它将是一个字符串(假设它具有“格式”)。您可以将密钥创建为生成的列。或者,您可能需要使用触发器来计算它。

通常,对于标识列,整数更好,即使最终用户从未看到它们。这有一些优点:

  • 它们编码数据库中行插入的顺序。例如,您可以获取最后插入的行。
  • 它们对于外键引用更有效(因为数字是固定长度的,通常比字符串短)。
  • 当需要修复数据时,它们可以直接寻址行。

0
投票

你可以创建一个Computed Column并只是附加身份

('Custom_'+CONVERT(varchar(10),iden))
© www.soinside.com 2019 - 2024. All rights reserved.