Трудно сказать, что на самом деле делает ваш код, но вы упоминаете, что ваш хранимый процесс использует курсоры и что ваш хранимый процесс работает медленно. Я пишу свои хранимые процедуры для использования временных таблиц и перебираю временные таблицы, как показано в следующем примере. Это заставляло мои проки запускаться от нескольких секунд до нескольких минут, когда они использовались от нескольких минут до нескольких часов, когда я использовал курсоры. Если вы используете курсоры, а профилирование указывает, что код курсора в вашем хранимом процессе медленный, попробуйте временные таблицы.
Вы никогда не вернетесь к курсорам.
-- create a temporary table
DECLARE @FrontDeskRows table (
id int,
Arrival datetime,
Departure datetime,
CheckedIn int,
OwnerID varchar(50),
GuestID varchar(50),
[LName] varchar (256),
[FName] varchar (256),
[Address] varchar (256),
[City] varchar (256),
[State] varchar (256),
[Zip] varchar (256),
[phone] varchar (256),
[Status] int )
-- load your temporary table
INSERT INTO @FrontDeskRows
SELECT id,
Arrival,
Departure,
CheckedIn,
OwnerID,
GuestID,
[LName],
[FName],
[Address],
[City],
[State],
[Zip],
[phone],
[Status]
FROM FrontDesk
ORDER BY Id ASC
DECLARE @arrival as DateTime
DECLARE @departure as DateTime
DECLARE @id as int
-- loop over the temprary table
SELECT @id = (SELECT MIN(id) FROM @FrontDeskRows)
SELECT @arrival = Arrival FROM @FrontDeskRows Where id = @id
SELECT @departure = Departure FROM @FrontDeskRows Where id = @id
WHILE @id IS NOT NULL
BEGIN
-- PROCESS EACH ROW HERE
-- get the next item in the temporary table
SELECT @id = (SELECT MIN(id) FROM @FrontDeskRows WHERE id > @id)
SELECT @arrival = Arrival FROM @FrontDeskRows Where id = @id
SELECT @departure = Departure FROM @FrontDeskRows Where id = @id
END