コードが実際に何をしているのかを伝えるのは難しいですが、ストアド プロシージャがカーソルを使用しており、ストアド プロシージャが遅いと述べています。一時テーブルを使用するようにストアド プロシージャを作成し、次の例に示すように一時テーブルを反復処理します。これにより、カーソルを使用したときに数分から数時間かかっていたプロシージャが、数秒から数分で実行されるようになりました。カーソルを使用していて、プロファイリングでストアド プロシージャのカーソル コードが遅いことが示されている場合は、一時テーブルを試してみてください。
カーソルに戻ることはありません。
-- 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