코드가 실제로 무엇을하는지 알기는 어렵지만 저장된 proc가 커서를 사용하고 있으며 저장된 proc이 느리다는 것을 언급합니다. 임시 테이블을 사용하기 위해 저장된 procs를 작성하고 다음 예제에서와 같이 임시 테이블을 반복합니다. 이로 인해 커서를 사용했을 때 몇 분에서 몇 시간 정도 걸릴 때 procs를 단 몇 초 만에 실행할 수있었습니다. 커서를 사용하고 프로파일 링이 저장된 proc의 커서 코드가 천천히 느리다면 임시 테이블에 시도해보십시오.
커서로 돌아 오지 못할 것입니다.
-- 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
무슨 일이 일어나는지 SQL Profiler를 사용해 보았습니까? – Ryk
그것은 단지 sproc가 시작되었음을 보여줍니다. 언급해야 할 것은이 프로세스는 이전에 원래 데이터베이스에서 잘 실행되었다는 것입니다. 그런 다음 해당 데이터베이스의 백업과 다른 이름으로 현재 데이터베이스를 복원했습니다. – Brian