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

时间:2015-09-16 08:41:37

标签: sql sql-server sql-server-2012 sql-server-2014

您可以使用1或2序列。

假设我有一个表格tblOrder,其中有两列,OrderIDCompany。我只在表格中使用了两家公司IBMAirtel

我想要的是什么时候Company = IBM然后OrderID插入为1,当公司为Airtel时,它应该插入OrderID作为1001并重复步骤1, OrderID的下一个IBM的含义应为2,而Airtel的含义应为1002。

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

1 个答案:

答案 0 :(得分:1)

编辑:更多想法: 1)您可以拥有ROW_NUMBER() OVER(PARTITION BY Company ORDER BY OrderID)的视图。这将始终为每个组提供无间隙的运行数 - 但在每个呼叫中​​可能不一样。

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;