gpt4 book ai didi

sql - SQL SERVER 2008 中的复合 IDENTITY 列

转载 作者:行者123 更新时间:2023-12-05 00:17:37 24 4
gpt4 key购买 nike

  • Orders 表有一个 CustomerId 列和一个 OrderId 列。
  • 出于某些原因,重要订单的 ID 不超过 2 个字节。
  • 总共会有几百万个订单,这使得 2 个字节不足以用于全局订单 ID。
  • 一个客户的订单不会超过几千个,2 个字节就足够了。
  • 显而易见的解决方案是让 (CustomerId, CustomerOrderNumber) 是唯一的,而不是 OrderId 本身。

问题 是生成下一个 CustomerOrderId。最好不要为每个客户创建单独的表(即使它只包含一个 IDENTITY 列),以使解决方案的上层保持简单。

问:您将如何生成下一个 OrderId,以便 (CustomerId, CustomerOrderId) 是唯一的,但允许 CustomerOrderNumber 本身有重复? Sql Server 2008 是否具有执行此操作的内置功能?

由于找不到更好的术语,我将其称为复合 IDENTITY 列。

最佳答案

试试这个:

DECLARE @Output table (orderID smallint)  --smallint=2 bytes

BEGIN TRANSACTION

INSERT INTO ORDERS
(CustomerId ,OrderId ,.....)
OUTPUT INSERTED.OrderId
INTO @Output
SELECT
@CustomerId ,ISNULL(MAX(OrderId),0)+1, @...
FROM ORDERS WITH (UPDLOCK,HOLDLOCK)
WHERE CustomerId=@CustomerId

--any other processing, can use just generated @Output.OrderId value if necessary

COMMIT

确保您在 CustomerId 和 OrderId 上有唯一的索引/约束

关于sql - SQL SERVER 2008 中的复合 IDENTITY 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com