У меня есть хранимая процедура, которая извлекает данные из ERP в хранилище данных (DW). Проблема, с которой я сталкиваюсь, заключается в том, что люди из DW попросили меня иметь уникальный идентификатор для каждой строки, которой у меня нет.Лучший способ борьбы с «дубликатами»
Пример
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
Но, как вы видите, если есть две записи в [РАСПРОСТРАНЕНИЕ] для того же LineID и InvID, вы получите две записи из запроса ab ove, а таблица [DISTRIBUTION] не содержит идентификатора для каждой строки.
Проблема
Итак, мне нужно создать идентификатор на лету, который:
- Unique (каждая строка должна быть разными)
- Repeteable (каждый раз, когда я бегу процесс, те же записи должны иметь одинаковое значение ID)
- У меня не может быть ID на уровне ERP. Я не могу просто добавить и ID в таблицу [DISTRIBUTION] , потому что это сторонний, плохо спроектированный ERP.
То, что я уже пытался
- Бинарные контрольные суммы не являются безопасными и, если данные изменения изменения идентификатора.
- ROW_NUMBER() - это то, что я использую, но ... Я не уверен в этом. Влияет на производительность , и есть шанс, что он изменится.
- помнится мою работу это не вариант :)
Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Какой ERP это - могут быть люди, которые решили проблему, которая у вас уже есть? Вы связались с их поддержкой? –
Возможно ли, что распределение будет когда-либо изменено или для позиций, которые когда-либо будут изменяться? Если это так, я думаю, что «повторяемость» невозможна, если вы не сохраните отображение между распределениями и позициями. –