顺序使用。一列上的两个序列

Sequence Use. Two Sequences on one column

您可以使用 1 个或 2 个序列。

假设我有一个 table tblOrder 和其中的 2 列,OrderIDCompany。我在 table、IBMAirtel 中只使用了两家公司。

我想要的是什么时候是 Company = IBM 然后 OrderID 插入为 1 并且当公司是 Airtel 那么它应该插入 OrderID 作为 1001 并重复递增的步骤1,意味着下一个 OrderID 对于 IBM 应该是 2 而对于 Airtel 应该是 1002.

我想我需要使用两个序列,在一个带有 case 表达式的列上。

编辑:更多想法: 1)你可以有一个 ROW_NUMBER() OVER(PARTITION BY Company ORDER BY OrderID) 的 VIEW 。这将始终为每个组提供一个无间隙的 运行 号码 - 但可能在每次通话中都不相同。

2) 使用两个单独的表,每个表都有一个 IDENTITY,并将它们与 UNION

合并

3) 使用函数获取下一个 ID(在插入后触发器中?)

CREATE FUNCTION dbo.GetNextID(@Company VARCHAR(MAX))
RETURNS INT
AS
BEGIN
    RETURN ISNULL((SELECT MAX(OrderID) FROM YourTable WHERE Company=@Company) + 1,0);
END

希望这对您有所帮助...

--旧文

如果你的序列不需要没有间隙,你可以尝试这样的事情:

还有其他方法(例如,使用两个不同的表并将它们组合在一个 UNION SELECT 中)。

DECLARE @tbl TABLE (OrderID INT IDENTITY
                   ,Company VARCHAR(100)
                   ,ResolvedID AS CASE Company WHEN 'Airtel' THEN OrderID+1000
                                               WHEN 'Something' THEN OrderID + 2000 
                                               ELSE OrderID END);
INSERT INTO @tbl VALUES('Airtel')
                      ,('IBM')
                      ,('Something');

SELECT * FROM @tbl;