表设计为每个唯一列

时间:2017-08-29 14:20:11

标签: sql sql-server database-design

说我有一张客户表

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

2 个答案:

答案 0 :(得分:2)

当然,只需在任何查询中使用row_number() ......无需将其设为永久列

select
   row_number() over (partition by customerId order by (select 1)) as ID
  ,customerId
from
   yourTable

请注意,这通常是在VIEW中完成的,因此您无需更新/更改您的表格。

答案 1 :(得分:1)

  

我想知道是否有一种本地方式让我的表行为像这样   (在创建具有任何约束的表时)。

不,没有。您必须编写自定义代码才能使表格像这样。