3

我正在运行以下代码:

    Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
    objBL.ConnectionString = "provider=SQLOLEDB.1;data 

    source=mySQLServer;database=myDB;uid=SA;pwd=myPword"
    objBL.ErrorLogFile = "c:\error.log"
    objBL.Execute "c:\xml\schema.xml", "c:\xml\addresses.xml"
    Set objBL = Nothing

我正在尝试将一个相当大的 XML 文件加载到 SQL 表中,但是我收到错误“无法将值 NULL 插入到列‘LocID’,表‘myDB.dbo.myTable’;列不允许空值。插入失败。”

“LocID”是我的主键和身份字段。有没有办法阻止它插入NULL此列,因为我只是在加载数据,而不是移动它并且我在 XML 文件中没有 ID 字段?

4

2 回答 2

2

在 objBL.Execute 之前添加这个

objBL.KeepIdentity = False

来自 MSDN 文章SQL Server XML Bulk Load Object Model (SQLXML 4.0)(强调我的)

保持身份

指定如何处理源文件中标识类型列的值。这是一个布尔属性。当该属性设置为 TRUE 时,XML Bulk Load 将源文件中指定的值分配给标识列。 当该属性设置为 FALSE 时,批量加载操作会忽略源中指定的标识列值。在这种情况下,SQL Server 为标识列分配一个值。

如果批量加载涉及作为外键的列,该列引用存储 SQL Server 生成的值的标识列,则批量加载会适当地将这些标识值传播到外键列。

此属性的值适用于批量加载中涉及的所有列。默认值是true。

于 2011-04-22T15:15:22.173 回答
1

如果您在数据库中执行 BulkInsert,您应该在每个列可以为 NULL 的临时表中执行 BulkInsert,并且我通常将我的 Size 设置为 VARCHAR(800)。

一旦它在这些表中,我就会进行 ETL 并将其加载到我的主表中。

希望这可以帮助你。

于 2011-04-21T22:59:12.483 回答