创建我的自定义唯一键

时间:2018-03-02 12:02:06

标签: sql sql-server tsql

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

格式如下:

PRN-YEAR-MyAppGeneratedInt

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

您可以创建一个SEQUENCE来满足您在SQL Server 2012中引入的目的。可以找到有关SEQUENCE的真实详细说明{。{3}}。

希望这会有所帮助:)

根据您在评论中指定的格式,我还会举例说明如何使用序列解决问题:

首先创建一个类似的序列:

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

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

  1. 获取序列的下一个值"为SeqName选择下一个值;"
  2. 使用以下值创建字符串:String key= "PRN"+year+SeqValue;
  3. 最后将此字符串存储为Insert语句中的唯一键。
  4. 您可以根据需要编写应用程序代码:)

答案 2 :(得分:0)

您可以创建Computed Column,然后添加标识

('Custom_'+CONVERT(varchar(10),iden))