我试图使用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]主机文件列只有在复制到服务器时才会被跳过”。
可以使用格式文件解决,但由于此代码需要每天运行,可能每天运行一次以上,并且表可能会发生变化,我不愿意不断调整格式文件(有100个需要相同程序的表格。
此外,这是在客户数据库上运行的,他不喜欢我在他们的数据库中创建视图。
任何人都知道如何使用cdc函数中选定数量的列创建文本文件(.dat)?
答案 0 :(得分:1)
找到答案,无论使用哪个版本的bcp,bcp cant句柄声明,看来。如果我编辑出来,就像魅力一样。 但是,根据不同forum的人,BCP应该处理变量的声明。很高兴它现在适合我,但仍然困惑为什么它现在和之前没有。