Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建自定义唯一密钥_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 创建自定义唯一密钥

Sql 创建自定义唯一密钥,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的SQL Server中有一个表。目前,我正在使用identity列唯一地标识每个记录,但我不断变化的需求需要以特定格式生成唯一的密钥(由我的客户指定)。我已尝试通过将唯一整数(每次插入时递增)附加到指定的格式,从应用程序生成唯一密钥。我的客户对我当前的解决方案不满意。 如果我能被引导到一个更好的技术来解决我的问题,而不是我目前的解决方案,那就太好了 格式如下: PRN-YEAR-MyAppGeneratedInt 您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到

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

格式如下:

PRN-YEAR-MyAppGeneratedInt

您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到关于序列的真正详细的解释

希望这有帮助:)

根据您在评论中指定的格式,让我也给您一个示例,说明如何使用序列解决您的问题:

首先创建一个序列,如:

CREATE SEQUENCE SeqName
AS int
START WITH 1
INCREMENT BY 1
CYCLE 
CACHE 
接下来,您可以使用此序列在应用程序中生成所需的唯一密钥

  • 获取序列“为SeqName选择下一个值”的下一个值
  • 使用如下值创建字符串:
    string key=“PRN”+year+SeqValue
  • 最后,在Insert语句中将此字符串存储为唯一键

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

    您可以创建一个序列来满足SQL Server 2012中引入的目的。可以找到关于序列的真正详细的解释

    希望这有帮助:)

    根据您在评论中指定的格式,让我也给您一个示例,说明如何使用序列解决您的问题:

    首先创建一个序列,如:

    CREATE SEQUENCE SeqName
    AS int
    START WITH 1
    INCREMENT BY 1
    CYCLE 
    CACHE 
    
    接下来,您可以使用此序列在应用程序中生成所需的唯一密钥

  • 获取序列“为SeqName选择下一个值”的下一个值
  • 使用如下值创建字符串:
    string key=“PRN”+year+SeqValue
  • 最后,在Insert语句中将此字符串存储为唯一键

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

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

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

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

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

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

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

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

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

    ('Custom_'+CONVERT(varchar(10),iden))
    
    您可以创建一个标识,然后只附加标识

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

    @B房屋
    新建()
    ?这不是t-SQL关键字。了解数据格式会很好。@Larnu输入错误,更正:)格式就像PRN YEAR MyAppGeneratedTo您能处理计算列吗?@BHouse
    NEW()
    ?这不是t-SQL关键字。了解数据格式会很好。@Larnu输入错误,更正:)格式类似于PRN YEAR MyAppGeneratedTo您能处理计算列吗?结果仍然是整数。想详细说明一下这会有什么用吗?你共享的链接需要linkedin登录。你可以共享另一个吗@TayyabI?我将共享一个。恐怕我不能。然而,为什么不创建一个链接id呢?实际上,它可能对我共享的链接和链接本身都有帮助:)结果仍然是一个整数。想详细说明一下这会有什么用吗?你共享的链接需要linkedin登录。你可以共享另一个吗@TayyabI?我将共享一个。恐怕我不能。但是,为什么不创建一个链接id呢?它实际上可能会对您有所帮助,包括我共享的链接和链接本身:)