SQLXMLBulkLoad通过VBScript

时间:2011-04-21 21:20:39

标签: sql sql-server xml sql-server-2005 bulk-load

我正在运行以下代码:

    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';列不允许空值.INSERT失败。“

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

2 个答案:

答案 0 :(得分:2)

在objBL.Execute

之前添加
objBL.KeepIdentity = False

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

  

KeepIdentity

     

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

     

如果批量加载涉及一列   这是指一个外键   其中SQL的标识列   存储服务器生成的值,   批量加载适当传播   这些身份价值给了外国人   关键栏目。

     

此属性的值适用于   所有列都涉及批量加载。   默认值为TRUE。

答案 1 :(得分:1)

如果你在数据库中执行BulkInsert,你应该批量插入临时表,其中每列可以为NULL,我通常将我的大小设置为VARCHAR(800)。

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

希望这可以帮助你。