0

我们有一个数据库表,我们在部署过程中预先填充了数据。由于其中一列是二进制的(它是二进制序列化对象),我们BCP用来将数据复制到表中。

到目前为止,这工作得很好,但是,今天我们Windows Server 2008第一次在机器上尝试了这种技术,并注意到并不是所有的列都在更新。31 rows在通常作为此操作的一部分插入的那些中,2 rows实际上只有它们binary columns正确填充。其他 29 行的binary column. 这是我们第一次看到这样的问题,这是我们用于所有部署的同一个 .dat 文件。

有没有其他人以前遇到过这个问题,或者对这个问题可能是什么有任何见解?

在此先感谢,杰里米

4

1 回答 1

0

我的猜测是您正在使用 -c 或 -w 将其转储为文本,并且它会阻塞它不喜欢的特定字符组合并以 NULL 代替。如果没有格式文件,这也可能在本机模式下发生。尝试以下方法,看看是否有帮助。(显然,您需要自己添加服务器和登录开关。)

bcp MyDatabase.dbo.MyTable format nul -f MyTable.fmt -n
bcp MyDatabase.dbo.MyTable out MyTable.dat -f MyTable.fmt -k -E -b 1000 -h "TABLOCK"

这会将表数据转储为带有格式文件、NULL 和标识值的直接二进制文件,以确保所有内容都对齐。此外,它将使用 1000 个批次来优化数据转储。然后,将其插入:

bcp MySecondData.dbo.MyTable in MyTable.dat -f MyTable.fmt -n -b 1000

...这将使用格式文件、数据文件和设置批处理来稍微提高速度。如果您需要比这更快的速度,您需要查看 BULK INSERT、FirstRow/LastRow 和并行加载,但这有点超出了这个问题的范围。:)

于 2014-02-14T19:33:54.833 回答