Опрос данных в чанке - PullRequest
       4

Опрос данных в чанке

0 голосов
/ 01 февраля 2012

Я сохранил процедуру, как показано ниже.

CREATE procedure [dbo].[Poll_EDI834_5010]
AS
BEGIN
select
    Header.ST01,
    Header.ST02,
    Header.ST03 ,
    Header.SE02,
    Line.INS01__InsuredIndicator ,
    Line.PER04__CommunicationNumber ,
      Line.PER05_CommunicationNumberQualifier ,
      Line.DMG06_CitizenshipStatusCode ,
         (select Member_Ref.REF01_ReferenceIdentificationQualifier ,Member_Ref.REF02_MemberSupplementalIdentifier
   from EDI834_5010_2000_RefLoop Member_Ref        
   where Member_Ref.Id_Header = Header.BGN02__TransactionSetIdentifierCode
   and Member_Ref.Id_Loop2000 = Line.Member_Id         
   for xml auto, elements, type) ,
    (select Member_DTP.DTP01_DateTimeQualifier , Member_DTP.DTP02_DateTimePeriodFormatQualifier , Member_DTP.DTP03_StatusInformationEffectiveDate
   from EDI834_5010_2000DTP Member_DTP        
   where Member_DTP.Header_Id = Header.BGN02__TransactionSetIdentifierCode
   and Member_DTP.Member_Id = Line.Member_Id         
   for xml auto, elements, type) ,
   VLine.HD01_MaintenanceTypeCode,
   VLine.HD03_InsuranceLineCode ,
    VLine.N402_ProviderStateCode ,
   VLine.N403_ProviderPostalZoneorZIPCode ,
      (select ClaimDTP.DTP01__DateTimeQualifier , ClaimDTP.DTP02__DateTimePeriodFormatQualifier , ClaimDTP.DTP03__StatusInformationEffectiveDate
     from EDI834_5010_2300_DTPLoop ClaimDTP
     where ClaimDTP.Id_Header = Header.BGN02__TransactionSetIdentifierCode
     and ClaimDTP.Id_Loop2000 = Line.Member_Id
     and ClaimDTP.Id_Loop2300 = VLine.Id_Claim
     for xml auto, elements, type)
from EDI834_5010_Header Header 
join EDI834_5010_2000 Line  on Header.BGN02__TransactionSetIdentifierCode = Line.Header_Id
join EDI834_5010_2300Loop VLine on Header.BGN02__TransactionSetIdentifierCode = VLine.Id_Header_Id andVLine.Id_Loop2000=Line.Member_Id
for xml auto,ELEMENTS
END
GO

Его набирает около 100 000 записей. Мне нужно получить данные кусками. Например, сначала 10000, затем следующие 10000 ... что мне нужно изменить в моей хранимой процедуре, чтобы получить данные кусками.

1 Ответ

0 голосов
/ 01 февраля 2012

Вам понадобится какой-то индекс, столбец последовательности или столбец идентифицируемого идентификатора в ваших данных.Давайте назовем это keyColumn.Затем вам нужно разделить максимальное количество потенциальных строк на сколько вы хотите для каждой итерации.Я не знаю вашу схему, поэтому давайте просто используем 10000 строк, как вы сказали в своем вопросе.

Затем вам нужно выбрать столько строк, сколько попадает в каждую итерацию, и делать ... все, что выхотите сделать.

SELECT @minID = Min(keyColumn) FROM table WHERE condition
SELECT @maxID = Max(keyColumn) FROM table WHERE condition
SELECT @potentialRows = 10000

WHILE @minID < @maxID
BEGIN
    SET @breakID = @minID + @potentialRows
    SELECT columns FROM table WITH (NOLOCK, ...)
    WHERE condition AND keyColumn BETWEEN @minID AND @breakID

    -- Do what you want with the selected rows here...

    SET @minID = @breakID + 1
END

Если ваши значения keyColumn являются редкими, вам придется изменить расчет потенциальных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...