MDY対DMY PRODからNEW_TESTとNEW_PRODサーバーの両方への多数のSSISパッケージSSIS 2012の日付形式は、3つのSQL Serverがあります
ソース・データが
ソースDATEデータはDD/MM/YYYY(2015年11月のすなわち第5回2015年5月11日として格納されている)の形式であるフラットなテキストファイルから来ています。
SSISでは、DATEソース列(テキストファイル)の定義はUnicode文字列(DT_WSTR)で、ターゲット列(DB表内)のデータ型はDATETIMEなので、テキストファイルからのデータの読み取りと、それをDBテーブルに書き込む。
PROD(古い)サーバーでパッケージを実行すると、データが正しく読み込まれます。
NEW_TESTサーバーで同じ(しかし2012にアップグレードされた)パッケージを実行すると、データも正常にロードされます。
ただし、NEW_PRODサーバーでパッケージを実行すると、データが正しく読み込まれません(つまり、2015年5月11日が2015年5月5日の予定ではなく、2015年5月11日として読み込まれます)。したがって、NEW_PRODサーバーは、US(MDY)設定を使用して、何らかの形でUK(DMY)ソースの日付文字列を変換するようです。何が起こっているかを理解しようとかなりの時間を過ごした後、これは私が発見したものです
:
- NEW_PRODサーバは「順序SQL_Latin1_General_CP1_CI_AS」
- NEW_TESTサーバはLatin1_General_CI_AS」の照合を持っているに設定照合を持っています" - これは現在のPRODサーバーと一致しているため、NEW_PRODの照合が正しくないようです。
- 上記以外のサーバーレベルでのサーバー設定の違いは他にありません。
- ターゲットデータベースは、NEW_ *サーバーと現在のPRODサーバーの両方で、照合順序がLatin1_General_CI_ASに設定されています
- ローカルマシンで手動でパッケージを実行すると、データはターゲットに関係なく正しくロードされます。
- NEW_PRODサーバーでスケジュールされたジョブからパッケージを実行すると、データが正しく読み込まれません。
- 興味深いことに、NEW_TESTサーバー上のスケジュールされたジョブからパッケージを実行すると、ターゲット接続がNEW_PRODサーバーを指している場合、データが正しくロードされる
- すべてのサーバーで、SSISサービスを実行するユーザーデフォルト言語は英国(sys.syslanguagesではlangid = 23)に設定されています。同じことが、スケジュールされたジョブを所有するユーザーにも当てはまります。
- SSISパッケージのソースデータ型の定義をDR_WSTRからDATETIMEに変更すると、パッケージの実行場所に関係なく、データが正しくロードされます。
- ソースとターゲットの間にデータ変換を追加し、その1つの列をDT_WSTRからDB DATETIMEに変換すると、データはNEW_PRODでINCORRECTLYにロードされますが、NEW_TESTではまだ正常に実行されます。
私はせずに、スケジューラを使用して、NEW_PRODサーバ上で正しくデータロードを作る方法を把握しようとしています:
正しい照合(非現実的でそのマスターデータベースを再構築- あまりにも多くのデータベース、あまりにも多くのデータ)
(それらのあまりに多くのプラス、彼らは他の二つのサーバー上で正常に動作)すべてのSSISパッケージ内のすべての日付列にDATETIMEにDT_WSTRからソース・データ・タイプを変更
VARCHARへのDATETIMEから(DBテーブルの)ターゲット・データ・タイプ(...)
だから、長い話を短く、私はソースを解釈する責任があるプロセスのどの要素を理解しようとしているの変更日付としての文字列と、誤った照合設定に関係なくMDYの代わりにDMYを使用する方法私はそれを得たと思ったが、上のリストの項目7は私に再び困惑させた。
何か暗いヒント?
SSISパッケージでは、これらの日付をロードするデータフローのターゲットに対して、Connection Managerの外観はどのようになりますか?どのユーザーが使用するように構成されていますか?それはWindows認証またはSQL Server認証を使用していますか? (私は照合が赤字になるかもしれないと思う、それはUS/UKの日付形式の混乱につながる唯一のユーザー言語設定だと確信している) –
SQL Server認証はすべてのサーバーでオフになっている。すべての接続はAD(Windows)ログインを介して行われます。 –
パッケージを実行しているSQL Serverエージェントジョブのログファイル(「履歴の表示」を使用)を表示し、ステップの詳細を展開すると、「Executed as user ...」に期待しているユーザーが表示されますか?メッセージ? –