私がやろうとしているのは、T-SQL ステートメントの実行タスクを使用して、メンテナンス プランを介して以下のストアド プロシージャを自動的に実行することです。私が見ているのは、この手順が保守計画の一部として実行されると、何らかの理由で、INSERT ステートメントが 2 回実行されたかのように、追加されたレコードが 2 倍になることです。これがキッカーです。Management Studio を介して手動で実行すると、期待どおりに実行され、単一のレコード セットがテーブルに追加されます。回避策として TRUNCATE TABLE を使用すると問題が解決するように見えますが、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