1

BCP を使用して、CDC 関数から .dat ファイルにデータをダンプしようとしています。次のクエリを使用しています(Server 2008 R2で機能します):

USE LEESWIJZER

DECLARE @begin_time datetime
, @end_time datetime
, @from_lsn binary(10)
, @to_lsn binary(10)

SET @end_time = '2013-07-05 12:00:00.000';    

SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal',  @end_time);
SELECT @from_lsn = sys.fn_cdc_get_min_lsn('dbo_LWR_CONTRIBUTIES')

SELECT sys.fn_cdc_map_lsn_to_time(__$start_lsn) AS ChangeDTS
, *
FROM cdc.fn_cdc_get_net_changes_dbo_LWR_CONTRIBUTIES (@from_lsn, @to_LSN, 'all')

(読みやすいように編集、BCP で単一の文字列として使用)

私のBCP文字列は次のとおりです。

BCP "Query above" queryout "C:\temp\LWRCONTRIBUTIES.dat" -w -t ";|" -r \n -T -S {server\\instance} -o "C:\temp\LWRCONTRIBUTIES.log"

ご覧のとおり、Unicode の .dat ファイルとログ ファイルが必要です。関数の結果に追加された「ChangeDTS」列が問題を引き起こしていると思います。エラー メッセージは次のとおりです。「[Microsoft][SQL Native Client]ホスト ファイルの列は、サーバーにコピーする場合にのみスキップされる可能性があります」。

フォーマット ファイルを使用して解決される可能性がありますが、このコードは毎日、おそらく 1 日に 1 回以上実行する必要があり、テーブルは変更される可能性があるため、フォーマット ファイルを常に調整することには消極的です (数百のテーブルが必要です)。同じ手順)。

さらに、これはクライアント データベースで実行されます。クライアント データベースにビューを作成することは好きではありません。

cdc 関数から選択した列数でテキスト ファイル (.dat) を作成する方法を知っている人はいますか?

4

1 に答える 1

1

使用されているbcpのバージョンに関係なく、答えが見つかりました.bcpは宣言を処理できないようです。それらを編集すると、魅力のように機能します。ただし、別のフォーラムの誰かによると、BCP は変数の宣言を処理する必要があります。今はうまくいきますが、なぜ今はうまくいき、以前はうまくいかなかったのかまだ混乱しています.

于 2012-08-13T07:56:22.340 に答える