SQLXMLBulkLoad через VBScript

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

    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?


person Dexter    schedule 21.04.2011    source источник


Ответы (2)


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

objBL.KeepIdentity = False

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

Сохранить личность

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

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

Значение этого свойства применяется ко всем столбцам, участвующим в массовой загрузке. Значение по умолчанию верно.

person Conrad Frix    schedule 22.04.2011
comment
Работал отлично! Спасибо. На самом деле я нашел это вчера, просматривая документацию MSDN по объекту SQLXMLBulkLoad, но я не мог добавить ответ в течение нескольких часов. Рад, что кто-то сделал! - person Dexter; 23.04.2011

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

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

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

person Robbie Tapping    schedule 21.04.2011