SQLXMLBulkLoad через VBScript - PullRequest
       20

SQLXMLBulkLoad через VBScript

3 голосов
/ 22 апреля 2011

Я использую следующий код:

    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» - это мой первичный ключ и поле Identity. Есть ли способ предотвратить вставку NULL в этот столбец, поскольку я просто загружаю данные, а не перемещаю их, и у меня нет полей идентификатора в файле XML?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Добавьте это перед objBL.Execute

objBL.KeepIdentity = False

Из статьи MSDN Объектная модель массовой загрузки XML-файла SQL Server (SQLXML 4.0) (выделено мной)

KeepIdentity

Указывает, как обращаться со значениями для типа удостоверения. столбец в исходном файле. Это Булево свойство. Когда собственность если установлено значение TRUE, массовая загрузка XML назначает значения, указанные в Исходный файл в столбце идентификации. Когда для свойства задано значение FALSE, операция массовой загрузки игнорирует значения столбца идентификации, указанные в источнике. В этом случае, SQL Server присваивает значение столбец идентификации.

Если при массовой загрузке используется столбец это внешний ключ, относящийся к столбец идентичности, в котором SQL Сгенерированные сервером значения сохраняются, Массовая загрузка соответственно распространяется эти ценности идентичности для иностранного ключевой столбец.

Значение этого свойства относится к все столбцы участвуют в массовой загрузке. Значением по умолчанию является ИСТИНА.

1 голос
/ 22 апреля 2011

Если вы выполняете BulkInsert в базу данных, вы должны выполнить групповую вставку во временные таблицы, где каждый столбец может иметь значение NULL, и я обычно устанавливаю для моего размера значение VARCHAR (800).

Как только оно попадает в этиТаблицы, я бы тогда ETL и загрузил его в свои мастер-таблицы.

Надеюсь, это поможет вам.

...