ステージ 5 で 2000 年より前のコンタクト/レスポンス履歴レコードのマイグレーションに失敗する

問題またはエラー: ステージ 5 で、2000 年 1 月 1 日より前の日付のコンタクト/レスポンス履歴レコードのマイグレーションに失敗し、「保全性制約に違反しました (親キーがみつかりません) (integrity constraints violated (parent key not found))」というエラーが表示されます。

解決方法: デフォルトで、UA_Calendar テーブルには、20000101 (2000 年 1 月 1 日に相当) で開始される DateID レコードが含まれます。2000 年 1 月 1 日より前のコンタクト/レスポンス履歴レコードは、ContactDateTime または ResponseDateTime の値が UA_Calendar テーブルに存在しない日付 ID を参照しているため、マイグレーションに失敗します。

この問題を回避するには、以下の手順に従い、ターゲット・システムの UA_Calendar テーブルに必要な日付 ID を挿入します。

  1. 以下の照会をソース・システムのデータベースで実行して、最古のコンタクト/レスポンス履歴レコードを判断します。

    select min(ContactDate) from UA_ContactHistory

    select min(ResponseDate) from UA_ResponseHistory

  2. ターゲット・システムの UA_Calendar テーブルに、必要な日付の範囲の日付 ID を挿入します。SQL Server 用の以下の例では、1999 年 1 月 1 日から 1999 年 12 月 31 日までのレコードを挿入します。太字の値を、それぞれ最初と最後の日付を指定する値に置き換えます。
注: 以下のサンプル・コードは、Campaign のインストールの ddl ディレクトリーにある ac_populate_tables_sqlsvr.sql スクリプトからのものです。データベースが DB2® または Oracle である場合は、ご使用のデータベース・タイプに合った DDL スクリプトからのコードを使用します (DB2 は ac_populate_tables_db2.sql、Oracle は ac_populate_tables_ora.sql)。
declare @date_v datetime
set @date_v = '01/01/1999'
set datefirst 7
set dateformat mdy
while @date_v <= '12/31/1999' 
begin
	insert into UA_Calendar
	(Year, FiscalYear, Quarter, FiscalQuarter, 
	Month, 
	WeekOfYear, 
	WeekOfMonth, 
	DayOfYear, DayOfMonth, DayOfWeek, 
	ActualDate, 
	FirstDayOfWeek, 
	LastDayOfWeek, 
	DateID) values 
	(DATEPART(yyyy, @date_v), DATEPART(yyyy, @date_v), DATEPART(q,
@date_v),DATEPART(q, @date_v),
	DATEPART(mm, @date_v),
	DATEPART(ww, @date_v),
	DATEDIFF(dd, DATEADD(dd,-1,DATEADD(ww, DATEDIFF(ww,0,DATEADD(dd,-
(DAY(@date_v)-1),@date_v)), 0)), @date_v)/7 + 1,
	DATEPART(dy, @date_v), DATEPART(dd, @date_v), DATEPART(dw, @date_v),
	@date_v, 
	DATEADD(dd, -1, DATEADD(wk, DATEDIFF(wk,0,@date_v), 0)),
	DATEADD(dd, 5, DATEADD(wk, DATEDIFF(wk,0,@date_v), 0)),
	CAST (CONVERT (varchar(20), @date_v, 112) AS BIGINT))
	set @date_v = DATEADD(dd, 1, @date_v)

end