我有一张桌子,里面有两种类型的笔记。收款单和交货单。它们是相同的数据结构,因此使用相同的表。
CREATE TABLE Notes (
Id int IDENTITY(1,1) NOT NULL,
Type int NOT NULL,
CustomerId int NOT NULL,
-- etc
)
我正在将数据从遗留系统迁移到此表中,并且要求收货和交货单有自己的序列号。
我之前已经实现了两个序列表
CREATE TABLE CollectionNoteSequence (
Id int IDENTITY(1,1) NOT NULL,
NoteId int NOT NULL
)
其中,该Id
列是集合备注的唯一顺序 ID,然后是 NoteId 外键的 to Notes.Id
。
现在是时候进行最终(实际)数据迁移了,而且这种设置似乎很难使用。
有没有一种方法可以将两个序列表分箱并向NoteNo
Notes 表添加一个字段,以便NoteNo
根据Note.Type
? 这是复合键还是什么?
新表可能看起来像
CREATE TABLE Notes (
Id int IDENTITY(1,1) NOT NULL,
NoteNo int NOT NULL,
Type int NOT NULL,
CustomerId int NOT NULL,
-- etc
)
数据看起来像:
Id NoteNo Type CustomerId
1 4000 1 123
2 4001 1 456
3 15123 2 789
4 4002 1 753
5 15124 2 741
我正在使用 MS SQL Server 2008。
您可以
partition by
在注释类型上使用,它允许按组重置计算。例如:将产生以下结果,这将为您提供音符类型中的序列。
顺便说一句,表格由http://www.sensefulsolutions.com/2010/10/format-text-as-table.html制作
很简单的回答...
为什么不是 2 个单独的表?和UNION 是根据需要还是在视图需要的时候结合起来?在我看来,“收款单”和“送货单”是独立的实体。在某些时候,每个人的定义都会有所不同。无论如何,它们现在是否真的相同:我预计会有一些差异?
此外,SQL Server 2012本身也支持SEQUENCE