내가하려는 것은 T-SQL 문 실행 태스크를 사용하여 유지 관리 계획을 통해 자동으로 아래의 저장 프로 시저를 실행하는 것입니다. 내가보고있는 것은이 프로 시저가 유지 관리 계획의 일부로 실행될 때 어떤 이유로 INSERT 문이 두 번 실행되는 것처럼 추가 된 레코드가 두 배가된다는 것입니다. 관리자가 수동으로 실행하면 예상대로 실행되고 단일 레코드 세트가 테이블에 추가됩니다. 해결 방법으로 TRUNCATE TABLE을 사용하면 문제를 해결하는 것처럼 보이지만 SQL 미러링을 위해 데이터베이스를 준비 할 때가되면 다시 제곱으로 돌아갈 것입니다.이상한 SQL 서버 동작
이전에 이런 종류의 행동을 본 사람이 있습니까? 또한이 테이블에서 발생하는 유일한 I/O는 아래 절차이므로 재 작성된 인덱스의 100 % 채우기 비율은 의도적 인 것입니다.
ALTER PROCEDURE [dbo].[usp_Populate_SearchTable]
AS
BEGIN
UPDATE ut_Update_Status SET [status] = 1, lastUpdate = getdate();
DELETE FROM ut_Permit_Lookup;
DBCC CHECKIDENT ('dbo.ut_Permit_Lookup', RESEED, 0);
-- OR
--TRUNCATE TABLE ut_Permit_Lookup;
INSERT INTO ut_Permit_Lookup (
NUMBER_KEY,
ADDR_FRACTION,
PARCEL_NO,
TYPE_TITLE,
TypDesc,
SUB_TYPE,
Location,
[DESCRIPTION],
DATE_A,
DATA_STATUS
)
SELECT a.NUMBER_KEY,
a.ADDR_FRACTION,
a.PARCEL_NO,
a.TYPE_TITLE,
a.TypDesc,
a.SUB_TYPE,
a.Location,
SUBSTRING(a.[DESCRIPTION], 1, 275),
a.DATE_A,
a.DATA_STATUS
FROM PERMPLUS.dbo.vw_Permit_WebLookup as a
WHERE a.TYPE_CAT = 'BLDG'
AND a.DATA_LEVEL = 'A'
AND (a.CLASS <> 'NA' OR a.CLASS IS NULL);
DBCC DBREINDEX ('dbo.ut_Permit_Lookup', idx_SearchIndex, 100);
UPDATE ut_Update_Status SET [status] = 0;
END
추적을 실행 해 보셨습니까? –
추적 후 DELETE 및 INSERT 문이 두 번 시작되고 한 번 완료됨을 나타냅니다. 그것은 기록의 배가를 확증하지만 나는 아직도 왜 잃어버린 것입니다. – Tehrab
실행 태스크에서 프로 시저를 어떻게 호출합니까? 당신은 그것이 유지 보수 계획의 일부로 실행된다고 말했습니까? 이것은이 작업의 성공 또는 실패시에 다른 객체/작업이 실행되고 있다는 것을 의미합니까? –