我想要做的是使用執行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
您是否嘗試過運行軌跡? –
跟蹤它之後,它顯示DELETE和INSERT語句兩次啓動並完成一次。這證實了雙倍的記錄,但我仍然失去原因。 – Tehrab
你如何在執行任務中調用過程?你說它是作爲維護計劃的一部分運行的,那麼這是否意味着其他對象/任務在這項任務的成功或失敗中運行? –