Мы получаем наборы данных фиксированной длины от клиента, которые выглядят примерно так:
1 SOMEFILE 20110922
2 20110101ABC999
3 JOHN SMITH 19800201
4 5000000 1000
2 20060101DEF999
3 JANE KOTZE 19811001
4 200000 800
5 5200000 1800
, где число в первой позиции в каждой строке указывает тип информации в строке.Типы:
1 Header record (only appears once, in the first line)
2 Contract record
3 Person record
4 Amounts record
5 Trailer record (only appears once, in the last line)
Информация в 2, 3 и 4 фактически относится к одной записи, и мне нужно найти способ на этапе загрузки объединить их в одну.Не существует идентификаторов, которые явно указывали бы, какие комбинации 2, 3 и 4 принадлежат друг другу, но во всех случаях они были упорядочены в необработанных данных так, чтобы они отображались непосредственно друг под другом.
Что мне нужно, так этошаг предварительной обработки, при котором исходные данные будут взяты, а затем объединены правильные 2,3 и 4 строки в одну запись (а затем снова выведены в виде текстового файла), например:
20110101ABC999JOHN SMITH 198002015000000 1000
20060101DEF999JANE KOTZE 19811001200000 800
Я думал о bcpвход в SQL (или даже просто с помощью Access) и назначение автоматически увеличенного целого числа как PK.то есть:
PK Type Record
1 1 SOMEFILE 20110922
2 2 20110101ABC999
3 3 JOHN SMITH 19800201
4 4 5000000 1000
5 2 20060101DEF999
6 3 JANE KOTZE 19811001
7 4 200000 800
8 5 5200000 1800
и затем что-то вроде:
select
type2.[record]+type3.[record]+type4.[record]
from
(select [record] from uploaded where [type]=2) as type2
join
(select [record] from uploaded where [type]=3) as type3
on type2.PK + 1 = type3.PK
join
(select [record] from uploaded where [type]=4) as type4
on type2.PK + 2 = type4.PK
Но меня беспокоит то, что это полностью зависит от назначения сервером SQL Server PK в том порядке, в котором данныепоявляется во входном файле штампа;Я не уверен, что это обязательно имело бы место.
Кто-нибудь знает?Или знаете лучший способ сделать это?
Спасибо
Карл