顺序使用。一列上的两个序列
Sequence Use. Two Sequences on one column
您可以使用 1 个或 2 个序列。
假设我有一个 table tblOrder
和其中的 2 列,OrderID
和 Company
。我在 table、IBM
和 Airtel
中只使用了两家公司。
我想要的是什么时候是 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;
您可以使用 1 个或 2 个序列。
假设我有一个 table tblOrder
和其中的 2 列,OrderID
和 Company
。我在 table、IBM
和 Airtel
中只使用了两家公司。
我想要的是什么时候是 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;