2012-10-03 117 views
1

我想要做的是使用執行T-SQL語句任務通過維護計劃自動執行下面的存儲過程。我所看到的是,當此過程作爲維護計劃的一部分運行時,出於某種原因,添加的記錄加倍,就像INSERT語句運行兩次一樣。這是kicker,當它通過Management Studio手動執行時,它會按預期方式運行,並且我得到一組添加到表中的記錄。使用TRUNCATE TABLE作爲解決方案似乎解決了這個問題,但是當準備數據庫進行SQL鏡像時,我將回到原點。奇怪的SQL Server行爲

有沒有人見過這種行爲?另外,爲了好奇,重建索引的100%填充因子是有意的,因爲該表上唯一發生的I/O是以下過程。

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代理作業會給出與在查詢窗口中從SSMS調用它相同的結果。