#sql-server-2005
#sql-server-2005
Вопрос:
ALTER PROCEDURE [dbo].[Sp_GetEmailForMailing]
-- Add the parameters for the stored procedure here
@end int=1000
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT top(500) RegistrationID, EmailID from dbo.Candidate_RegistrationData
where status_flag=1 and payment_status=2
and RegistrationID NOT IN (SELECT top(@end) RegistrationID from dbo.Candidate_RegistrationData
where status_flag=1 and payment_status=2) order by RegistrationID
END
Это моя хранимая процедура. В этом я хочу строки из 500, но я получаю номер строки из 250 …. у кого-нибудь есть идея, почему это происходит…Спасибо
Комментарии:
1. Вы хотите сказать, что регистрация first @ end будет пропущена? заказать по возрастанию регистрационного номера ?
Ответ №1:
Подзапрос, используемый в качестве источника данных для NOT IN
, не имеет ORDER BY
предложения. В результате механизм запросов может свободно принимать TOP(@end)
строки в любом порядке, который он считает нужным.
Ответ №2:
Я надеюсь, вы хотите пропустить регистрацию top @ end, упорядочить по RegistrationID
Вы должны попробовать приведенный ниже код.
ALTER PROCEDURE [dbo].[Sp_GetEmailForMailing]
@end int = 1000
AS
SET NOCOUNT ON;
BEGIN
Select Top(500) RegistrationID, EmailID From
(
Select Row_Number() Over(Order by RegistrationID) as RowId,
RegistrationID,
EmailID,
status_flag,
payment_status
From dbo.Candidate_RegistrationData
Where status_flag = 1 and payment_status = 2
)T
Where RowId > @end and status_flag = 1 and payment_status = 2
Order By RegistrationID
End