【问题标题】:How to use BCP to dump query (cdc function ) retrieved data to text file如何使用 BCP 将查询(cdc 函数)检索到的数据转储到文本文件
【发布时间】:2012-08-09 14:12:19
【问题描述】:

我正在尝试使用 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"

如您所见,我想要一个生成的 .dat unicode 文件和一个日志文件。我猜添加到函数结果中的“ChangeDTS”列导致了我的问题。错误消息显示:“[Microsoft][SQL Native Client]Host-file 列可能仅在复制到服务器时被跳过”。

它可以使用格式文件解决,但由于此代码需要每天运行,可能一天不止一次,并且表格可能会发生变化,我不愿意不断调整我的格式文件(有 100 个需要相同程序的表)。

此外,这是在客户数据库上运行的,他们不会喜欢我在他们的数据库中创建视图。

有人知道如何从 cdc 函数创建一个包含选定列数的文本文件 (.dat) 吗?

【问题讨论】:

  • 抱歉回复晚了 - 我也尝试过 BCP,但对它并不满意。最后我使用了一个名为“idea”的GUI工具来进行数据转换。
  • 在这种特殊情况下,GUI 并不好,需要命令行工具。不过还是谢谢。

标签: sql-server-2008-r2 bcp cdc


【解决方案1】:

找到了答案,无论使用哪个版本的 bcp,bcp 似乎都无法处理声明。如果我把它们编辑掉,就像一个魅力。 但是,据另一位forum 上的人说,BCP 应该是处理变量声明的。很高兴它现在对我有用,但仍然困惑为什么它现在有效而以前没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多