2
我有一个从ERP中提取数据到数据仓库(DW)的存储过程。 我面临的问题是,来自DW的人要求我为每一行都有一个我没有的唯一ID。处理“重复”的最佳方式
一个例子
CREATE TABLE [dbo].[INVOICES](
[InvID] [nchar](10) NULL,
[LineID] [nchar](10) NULL,
[Amount] [decimal](32, 4) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DISTRIBUTION](
[InvID] [nchar](10) NULL,
[LineID] [nchar](10) NULL,
[Percent] [decimal](3, 2) NULL
) ON [PRIMARY]
InvID LineID Amount
---------- ---------- ---------------------------------------
FC0000001 1 6788.0000
FC0000001 2 8908.0000
InvID LineID Percent
---------- ---------- ----------------------
FC0000001 1 10
FC0000001 1 90
FC0000001 2 100
所以,你可以查询:
SELECT I.InvID + '-' + D.LineID AS ID, D.*
FROM [INVOICES] AS I
LEFT JOIN [DISTRIBUTION] AS D
ON D.InvID = I.InvID
and D.LineID = I.LineID
而且将获得:
ID InvID LineID Percent
-------------------- ---------- ---------- ----------------------
FC0000001-1 FC0000001 1 10
FC0000001-1 FC0000001 1 90
FC0000001-2 FC0000001 2 100
但是,正如你看到的,如果有两个记录在[DISTRIBUTION]中为相同的LineID和InvID,您将从查询ab获得两条记录并且,[DISTRIBUTION]表中不包含每行的ID。
的问题
所以,我需要创建是动态的ID:
- 独特(每个行必须是不同的)
- Repeteable(我每次运行的时间过程中,相同的记录必须具有相同的ID值)
- 我无法在ERP级别上获得ID。我不能在[DISTRIBUTION] 表中添加和标识,因为它是第三方,设计不良的ERP。
我已经尝试过
- 二进制校验和是不是安全,如果数据更改ID的变化。
- ROW_NUMBER()是我正在使用的,但是...我不适合它。影响性能 ,并有可能发生变化。
- GRUB.EXE返回我的工作是不是一种选择:)
我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-10-05 18:59:33
它是哪一种ERP--可能有人已经解决了你已经存在的问题?你有联系他们的支持吗? – 2014-10-05 19:26:51
分销是否有可能改变,或者订单项有可能改变?如果是这样,我认为“可重复”是不可能的,除非您存储分布和订单项之间的映射。 – 2014-10-05 19:38:12