Я создаю веб-приложение ASP.net, которое получает файл CSV от пользователя, загружает файл на сервер, навалом копирует данные в TempHoldingTable
. Затем код вызывает хранимую процедуру, которая содержит оператор Merge
для копирования данных из TempHoldingTable
в соответствующие несколько таблиц. Я использую SQL Server 2008 R2.SQL Bulk Upload, Merge and Delete records
У меня есть несколько Merge
заявления в хранимой процедуре, я скопировал только один ниже:
MERGE Client AS C
USING (SELECT ClientID, Value1, Value2, Value3, Row_Number() Over (PARTITION BY ClientID order by Date desc) as Rno
FROM TempHoldingTable) AS T ON (C.ClientID = T.ClientID)
WHEN NOT MATCHED BY TARGET AND T.Rno = 1
THEN
INSERT(ClientID, Value1, Value2, Value3)
VALUES(T.ClientID, Value1, Value2, Value3)
OUTPUT $action, inserted.*, deleted.*;
Файл CSV загружается каждый месяц, так что позволяет предположит, что первый файл был загружен в январе 2014 года и имеет следующий данные:
ClientID Value1 Value2 Value3
111 abc def ghi
222 jkl mno pqr
затем пользователь будет загружать второй файл в феврале 2014 года и имеет следующие данные:
ClientID Value1 Value2 Value3
111 aaa bbb ghi
222 jkl mno pqr
333 sss ttt uuu
Процедура Объединить будет обновлять таблицу клиента для ClientID 111, потому что value1 & значение2 были изменены, оставьте ClientID 222, как это и вставить новую строку для ClientID 333.
Мой вопрос, если пользователь решит удалите файл Feb 2014, как я могу отслеживать и возвращать изменения, которые были вызваны из-за загрузки в феврале 2014 года, чтобы таблица Client содержала те же данные, что и после загрузки в январе 2014 года.
Обратите внимание, что это отслеживание должно выполняться для каждой загрузки, так что всякий раз, когда пользователь удаляет файл, база данных возвращается к той же позиции, что и в предыдущем месяце.
Мой второй вопрос заключается в том, как изменить инструкцию Merge для обновления значений, если ClientID существует, а любой столбец имеет другое значение, чем предыдущее.
Спасибо за ваше терпение, прочитав все это, и любая помощь будет принята с благодарностью.
Таким образом, если пользователь, где удалить файл Feb2014, у вас будет вернуться к набору Jan 2014, а затем воспроизводить файлы за март, апрель, Май и так далее ... Это правильно? – SoulTrain
Пользователям будет разрешено только удалять файл в обратном порядке, поэтому, если последний файл был загружен в марте, после удаления файла Feb им удаляется файл March. Когда они удаляют файл March, данные будут возвращены к тому, как это было при загрузке файла Feb. И когда они удаляют файл Feb, тогда данные будут возвращены в январе. Как только у нас будут данные Jan, пользователю будет разрешено снова загрузить файл Feb, затем в марте и так далее. – learner
Насколько велики ваши данные? – SoulTrain