Sql 顺序使用。一列上有两个序列
您可以使用1或2序列 假设我有一个表Sql 顺序使用。一列上有两个序列,sql,sql-server,sql-server-2012,sql-server-2014,Sql,Sql Server,Sql Server 2012,Sql Server 2014,您可以使用1或2序列 假设我有一个表tblOrder,其中有两列,OrderID和Company。我的表中只使用了两家公司,IBM和Airtel 我想要的是当公司是Company=IBM时,然后将OrderID插入为1;当公司是Airtel时,它应该将OrderID插入为1001,并以增量1重复步骤,这意味着IBM的下一步OrderID应该是2,而Airtel应该是1002 我想我需要在一列中使用两个序列,带有大小写表达式。编辑:更多想法: 1) 您可以使用ROW\u NUMBER()查看(按公
tblOrder
,其中有两列,OrderID
和Company
。我的表中只使用了两家公司,IBM
和Airtel
我想要的是当公司是Company=IBM
时,然后将OrderID
插入为1;当公司是Airtel
时,它应该将OrderID
插入为1001,并以增量1重复步骤,这意味着IBM
的下一步OrderID
应该是2,而Airtel
应该是1002
我想我需要在一列中使用两个序列,带有大小写表达式。编辑:更多想法:
1) 您可以使用ROW\u NUMBER()查看(按公司订单按订单ID划分)
。这将始终为每个组提供一个无差距的跑步号码,但在每次通话中可能不相同
2) 使用两个单独的表,每个表具有一个标识,并将它们与UNION组合
3) 使用函数获取下一个ID(在插入后触发器中?)
希望这有助于
--旧文本
如果您的序列不必没有间隙,您可以尝试以下方法:
还有其他方法(例如,使用两个不同的表并将它们组合在一个UNION SELECT中)
是的,IBM需要一个序列,Airtel需要一个序列——那么到底是什么问题呢?如果公司是Airtel,您可以使用一个计算列将1000添加到您的标识ID中。但是-老实说-这听起来很糟糕的方法…我如何在一列上绑定两个序列。这就是问题所在,我该如何处理?请给我一个工作的例子…下一个ID时,你插入,然后它应该插入一系列。意味着应该是1001然后是1002然后是1003。。。。但是orderid可以是任何东西,这意味着我们不能说orderid+1000,这是错误的。@VishalMittal,你在哪里需要这个ID?一般来说,将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
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;