我想要做的是使用执行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
你如何在执行任务中调用过程?你说它是作为维护计划的一部分运行的,那么这是否意味着其他对象/任务在这项任务的成功或失败中运行? –