您可以使用1或2序列。
假设我有一个表格tblOrder
,其中有两列,OrderID
和Company
。我只在表格中使用了两家公司IBM
和Airtel
。
我想要的是什么时候Company = IBM
然后OrderID
插入为1,当公司为Airtel
时,它应该插入OrderID
作为1001并重复步骤1, OrderID
的下一个IBM
的含义应为2,而Airtel
的含义应为1002。
我想我需要在一个带有case表达式的列上使用两个序列。
答案 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;