【问题标题】:Unable to update the table of SQL Server with BCP utility无法使用 BCP 实用程序更新 SQL Server 表
【发布时间】:2009-07-08 19:14:11
【问题描述】:

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

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

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

提前致谢, 杰里米

【问题讨论】:

  • SQL Server 我假设... 2005 或 2008?
  • 是的,很抱歉 SQL Server 2005。到目前为止,我们实际上已经在开发人员版和企业版上运行了它,没有出现任何问题。我们看到问题的机器实际上正在运行标准版。我不确定这是否会导致问题。

标签: sql sql-server-2005 windows-vista bcp


【解决方案1】:

我的猜测是您正在使用 -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-03-20
    • 2011-12-21
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2017-07-23
    相关资源
    最近更新 更多