无法使用BCP实用程序更新SQL Server的表
作为部署过程的一部分,我们有一个预先填充数据的数据库表。因为其中一列是二进制的,所以它是二进制序列化对象,我们使用BCP将数据复制到表中 到目前为止,这已经非常有效,但是,今天我们首次在Windows Server 2008计算机上尝试了这项技术,并注意到并非所有列都在更新。在此操作中通常插入的31行中,只有2行的二进制列填充正确。其他29行的二进制列只有空值。这是我们第一次看到这样的问题,这是我们用于所有部署的同一个.dat文件 其他人以前有没有遇到过这个问题,或者对这个问题有什么见解 提前感谢,,无法使用BCP实用程序更新SQL Server的表,sql,sql-server-2005,windows-vista,bcp,Sql,Sql Server 2005,Windows Vista,Bcp,作为部署过程的一部分,我们有一个预先填充数据的数据库表。因为其中一列是二进制的,所以它是二进制序列化对象,我们使用BCP将数据复制到表中 到目前为止,这已经非常有效,但是,今天我们首次在Windows Server 2008计算机上尝试了这项技术,并注意到并非所有列都在更新。在此操作中通常插入的31行中,只有2行的二进制列填充正确。其他29行的二进制列只有空值。这是我们第一次看到这样的问题,这是我们用于所有部署的同一个.dat文件 其他人以前有没有遇到过这个问题,或者对这个问题有什么见解 提前感
Jeremy我猜您正在使用-c或-w作为文本转储,它被它不喜欢的字符的特定组合和空值的子绑定所阻塞。如果没有格式文件,在本机模式下也会发生这种情况。试试下面的方法,看看是否有帮助。显然,您需要自己添加服务器和登录开关
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"
这将把表数据转储为具有格式文件、空值和标识值的直接二进制数据,以确保所有内容完全一致。此外,它将使用1000个批次来优化数据转储。然后,要将其插回:
bcp MySecondData.dbo.MyTable in MyTable.dat -f MyTable.fmt -n -b 1000
…它将使用格式文件、数据文件和设置批处理来稍微提高速度。如果您需要更高的速度,您可能希望查看批量插入、FirstRow/LastRow和并行加载,但这超出了这个问题的范围 SQL Server我想。。。2005年还是2008年?是的,很抱歉SQL Server 2005。到目前为止,我们已经在开发者版和企业版上运行了这个程序。我们看到的这台机器实际上运行的是标准版。我不确定这是否导致了这个问题。