Sql 创建自定义唯一密钥
我的SQL Server中有一个表。目前,我正在使用identity列唯一地标识每个记录,但我不断变化的需求需要以特定格式生成唯一的密钥(由我的客户指定)。我已尝试通过将唯一整数(每次插入时递增)附加到指定的格式,从应用程序生成唯一密钥。我的客户对我当前的解决方案不满意。 如果我能被引导到一个更好的技术来解决我的问题,而不是我目前的解决方案,那就太好了 格式如下:Sql 创建自定义唯一密钥,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的SQL Server中有一个表。目前,我正在使用identity列唯一地标识每个记录,但我不断变化的需求需要以特定格式生成唯一的密钥(由我的客户指定)。我已尝试通过将唯一整数(每次插入时递增)附加到指定的格式,从应用程序生成唯一密钥。我的客户对我当前的解决方案不满意。 如果我能被引导到一个更好的技术来解决我的问题,而不是我目前的解决方案,那就太好了 格式如下: PRN-YEAR-MyAppGeneratedInt 您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到
PRN-YEAR-MyAppGeneratedInt
您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到关于序列的真正详细的解释 希望这有帮助:) 根据您在评论中指定的格式,让我也给您一个示例,说明如何使用序列解决您的问题: 首先创建一个序列,如:
CREATE SEQUENCE SeqName
AS int
START WITH 1
INCREMENT BY 1
CYCLE
CACHE
接下来,您可以使用此序列在应用程序中生成所需的唯一密钥
string key=“PRN”+year+SeqValue代码>
您可以根据需要编写应用程序代码:)您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到关于序列的真正详细的解释 希望这有帮助:) 根据您在评论中指定的格式,让我也给您一个示例,说明如何使用序列解决您的问题: 首先创建一个序列,如:
CREATE SEQUENCE SeqName
AS int
START WITH 1
INCREMENT BY 1
CYCLE
CACHE
接下来,您可以使用此序列在应用程序中生成所需的唯一密钥
string key=“PRN”+year+SeqValue代码>
您可以根据需要编写应用程序代码:)基本上,保留当前的
identity
列。这是识别和管理表中的行的最佳方法
如果客户端需要另一个唯一密钥,请添加它。假设它是一个字符串(假设它有一个“格式”)。可以将键创建为生成的列。或者,您可能需要使用触发器来计算它
通常,整数对于标识列更好,即使最终用户从未看到它们。以下是一些优势:
- 它们对数据库中行插入的顺序进行编码。例如,您可以获取最后插入的行
- 它们对于外键引用更有效(因为数字是固定长度的,通常比字符串短)
- 当需要固定数据时,它们使直接寻址一行成为可能
标识列。这是识别和管理表中的行的最佳方法
如果客户端需要另一个唯一密钥,请添加它。假设它是一个字符串(假设它有一个“格式”)。可以将键创建为生成的列。或者,您可能需要使用触发器来计算它
通常,整数对于标识列更好,即使最终用户从未看到它们。以下是一些优势:
- 它们对数据库中行插入的顺序进行编码。例如,您可以获取最后插入的行
- 它们对于外键引用更有效(因为数字是固定长度的,通常比字符串短)
- 当需要固定数据时,它们使直接寻址一行成为可能
您可以创建一个
('Custom_'+CONVERT(varchar(10),iden))
您可以创建一个标识,然后只附加标识
('Custom_'+CONVERT(varchar(10),iden))
@B房屋新建()
?这不是t-SQL关键字。了解数据格式会很好。@Larnu输入错误,更正:)格式就像PRN YEAR MyAppGeneratedTo您能处理计算列吗?@BHouseNEW()
?这不是t-SQL关键字。了解数据格式会很好。@Larnu输入错误,更正:)格式类似于PRN YEAR MyAppGeneratedTo您能处理计算列吗?结果仍然是整数。想详细说明一下这会有什么用吗?你共享的链接需要linkedin登录。你可以共享另一个吗@TayyabI?我将共享一个。恐怕我不能。然而,为什么不创建一个链接id呢?实际上,它可能对我共享的链接和链接本身都有帮助:)结果仍然是一个整数。想详细说明一下这会有什么用吗?你共享的链接需要linkedin登录。你可以共享另一个吗@TayyabI?我将共享一个。恐怕我不能。但是,为什么不创建一个链接id呢?它实际上可能会对您有所帮助,包括我共享的链接和链接本身:)