原文:
我的环境:SQL SERVER 2008 R2:发布者 ->SQL SERVER 2017 订阅者
进程无法向表“"dbo"."XXXXX"”进行大容量复制。 (源: MSSQL_REPL,错误号: MSSQL_REPL20037)
获取帮助: http://help/MSSQL_REPL20037元数据查询失败对于造型说明无效的字符值 (源: MSSQLServer,错误号: 22018)获取帮助: http://help/22018未指定的错误Error messages: The process could not bulk copy into table '"dbo"."Cars"'. (Source: MSSQL_REPL, Error number: MSSQL_REPL20037) Get help: http://help/MSSQL_REPL20037 metadata query failed Invalid character value for cast specification (Source: MSSQLServer, Error number: 22018) Get help: http://help/22018 Unspecified error
解决方案: 原文
I had exactly the same problem replicating from SQL Server 2008 R2 to SQL Server 2016.
It seems that it is a specific problem with replication from 2008 R2 to 2016. The same replication setup works fine from SQL Server 2012 to SQL Server 2016.
Another workaround I found is to set the compatibility level of the subscriber database to 120 (instead of 130)I guess that there is a problem with native client 10 and the way it gathers the meta data of the destination table.
兼容性级别改为一致 即可!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
另外:
错误消息:进程无法向表“"dbo"."XXXX"”进行大容量复制。 (源: MSSQL_REPL,错误号: MSSQL_REPL20037)获取帮助: http://help/MSSQL_REPL20037数据转换失败(Data conversion failed)若要获取详细说明初始化订阅表时所遇到的错误的错误文件,请执行在下面显示的 bcp 命令。有关该 bcp 实用工具及其支持的选项的详细信息,请参阅 BOL。 (源: MSSQLServer,错误号: 20253)获取帮助: http://help/20253
解决方案: 比较数据库建表脚本,发现字段脚本不一致 比如:varchar(256)与varchar(512).改为一致即可。
以下网上摘录作为参考.
模拟出来的问题,这里记录下来吧。
事物复制中,发布的表有一字段允许为null,并且该字段存在null值。而自己在订阅中先创建该表,并且把这个字段该为not null,结果出现了以下的错误。
错误消息:进程无法向表“"dbo"."MyTable"”进行大容量复制。 (源: MSSQL_REPL,错误号: MSSQL_REPL20037)获取帮助: http://help/MSSQL_REPL20037字段大小太大若要获取详细说明初始化订阅表时所遇到的错误的错误文件,请执行在下面显示的 bcp 命令。有关该 bcp 实用工具及其支持的选项的详细信息,请参阅 BOL。 (源: MSSQLServer,错误号: 20253)获取帮助: http://help/20253bcp "Demo"."dbo"."MyTable" in "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ReplData\unc\DB_DEMO_SYNC\20160304164426\MyTable_2.bcp" -e "errorfile" -t"\n\n" -r"\n<,@g>\n" -m10000 -SDB01 -T -w (源: MSSQLServer,错误号: 20253)获取帮助: http://help/20253
所以,字段是否为空值,在发布和订阅的表中应该保持一致。