0

我想要做的是使用执行 T-SQL 语句任务通过维护计划自动执行下面的存储过程。我看到的是,当此过程作为维护计划的一部分运行时,由于某种原因,添加的记录加倍,就好像 INSERT 语句运行了两次一样。这是踢球者,当它通过 Management Studio 手动执行时,它按预期运行,并且我将一组记录添加到表中。使用 TRUNCATE TABLE 作为解决方法似乎可以解决问题,但是当需要为 SQL 镜像准备数据库时,我会回到原点。

有没有人见过这种行为?此外,出于好奇,重建索引上的 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
4

1 回答 1

0

好吧,我想提出一个我建议的正式答案......

我从来没有听说过这个问题。我遇到的维护计划虽然与您遇到的问题不同,但由于 SSMS 内部版本号低于我正在处理的实例。您没有说明您正在使用什么版本的 SQL,但如果它是 SQL 2008 或更高版本,您可以在http://connect.microsoft.com/sqlserver上提交一个连接项。

我可能会使用的唯一替代方法是仅使用 SQL 代理作业安排过程调用,看看是否得到相同的结果。我希望 SQL 代理作业会给出与您在查询窗口中从 SSMS 调用它相同的结果。

于 2012-10-03T19:18:24.663 回答