ステージ 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