2012-10-03 5 views
1

내가하려는 것은 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 
+1

추적을 실행 해 보셨습니까? –

+0

추적 후 DELETE 및 INSERT 문이 두 번 시작되고 한 번 완료됨을 나타냅니다. 그것은 기록의 배가를 확증하지만 나는 아직도 왜 잃어버린 것입니다. – Tehrab

+0

실행 태스크에서 프로 시저를 어떻게 호출합니까? 당신은 그것이 유지 보수 계획의 일부로 실행된다고 말했습니까? 이것은이 작업의 성공 또는 실패시에 다른 객체/작업이 실행되고 있다는 것을 의미합니까? –

답변

0

그럼 내가 제안 공식적인 답변을 ...

나는 문제를 들어 본 적이없는 넣어 같아요. 내가 가지고있는 유지 보수 계획은 당신이 가지고있는 종류가 아니지만 SSMS 빌드 번호가 내가 작업하고있는 인스턴스보다 낮기 때문에 발생했습니다. 어떤 SQL 빌드인지 명시하지 않았지만 SQL 2008 이상인 경우 http://connect.microsoft.com/sqlserver에 연결 항목을 제출할 수 있습니다.

아마 내가 사용하는 유일한 대안은 SQL 에이전트 작업으로 프로 시저 호출을 예약하고 동일한 결과를 얻는 지 확인하는 것입니다. SQL Agent 작업이 쿼리 창에서 SSMS에서 호출 한 것과 같은 결과를 줄 것이라고 기대합니다.