说我有一张客户表
id | customerId
1 569
2 569
1 577
1 555
2 555
3 555
在每个插入上,我希望id增加1取决于customerId列。我已经准备好了我的插入sp,如下所示,但我想知道是否有一种本地方式使我的表行为像这样(当创建具有任何约束的表时)。
ALTER dbo.ins_Customer
@CustomerId INT
AS
BEGIN
DECLARE @MaxSeqId INT
SELECT @MaxSeqId = MAX(id) FROM dbo.Customer
WHERE customerId = @CustomerId
INSERT INTO dbo.Customer VALUES (@MaxSeqId+1, @CustomerId)
END
我希望这个简单的insert语句使用任何可能的本机约束生成上面的结果。
ALTER dbo.ins_Customer
@CustomerId INT
AS
BEGIN
INSERT INTO dbo.Customer VALUES (@CustomerId)
END
答案 0 :(得分:2)
当然,只需在任何查询中使用row_number()
......无需将其设为永久列
select
row_number() over (partition by customerId order by (select 1)) as ID
,customerId
from
yourTable
请注意,这通常是在VIEW
中完成的,因此您无需更新/更改您的表格。
答案 1 :(得分:1)
我想知道是否有一种本地方式让我的表行为像这样 (在创建具有任何约束的表时)。
不,没有。您必须编写自定义代码才能使表格像这样。