Mysql 在块中轮询数据
我有如下的存储过程Mysql 在块中轮询数据,mysql,sql,sql-server,tsql,stored-procedures,Mysql,Sql,Sql Server,Tsql,Stored Procedures,我有如下的存储过程 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_CommunicationNumberQual
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
它大约有10万张唱片。我需要将数据分块获取。比如先10000,然后再10000…我需要在存储过程中更改什么以获得数据块。在数据中需要某种索引、序列列或可排序ID列。让我们称之为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值稀疏,则必须更改潜在行计算。这是MySql还是SQL Server?FOR语句不是有效的TSQL。您必须发布代码和错误消息;我看不到你的屏幕。