2012-01-10 2 views
3

У меня есть таблица tblScan с некоторыми данными varbinary. Я хочу экспортировать эту таблицу в XML-файл, поэтому я могу вставить это в SQL-лазурь с вставкой BCP Bulk. (BTW это даже можно преобразовать данные в XML VARBINARY ??)Экспорт XML через BCP Bulk Export

Я делаю:

DECLARE @String varchar(8000) 
SET @String='bcp "SELECT * FROM dbo.tblScan FOR XML RAW, XMLSCHEMA" queryout C:\Users\DAAGEU\Desktop\tblScanOutput.xml -c -T' 
EXEC xp_cmdshell @String 

Но я получил эту ошибку на выходе:

Output error

Есть ли другие решения для этого?

+0

Ошибка говорит, что не удалось открыть соединение, но я использую доверенное соединение или? – dg90

+0

Похоже, что это не проблема с тем, что вы делаете с Xml, но с подключением к серверу вообще. Выполняется ли более простой запрос (например, 'SELECT COUNT (*) FROM dbo.tblScan')? – AakashM

+0

Нет, это дает ту же ошибку – dg90

ответ

4

Это на самом деле проблема с VARBINARY и XML (в SQL 2008 R2):

FOR XML EXPLICIT and RAW modes currently do not support addressing binary data as URLs in column SomeComlumn. Remove the column, or use the BINARY BASE64 mode, or create the URL directly using the 'dbobject/TABLE[@PK1="V1"]/@COLUMN' syntax.

Быстрый поиск показал this post.

Есть ли причина, по которой вы хотите экспортировать в XML? Я использую bcp, используя двоичный вывод по умолчанию, и никаких проблем с полями VarBinary не возникает. Двоичные файлы намного меньше, чем файлы XML. И если вы не хотите делать какие-либо манипуляции между экспортом и импортом, я предлагаю вам использовать двоичные файлы.

Попробуйте изменить запрос:

SET @String='bcp "SELECT * FROM dbo.tblScan FOR XML RAW, BINARY BASE64" queryout C:\Users\DAAGEU\Desktop\tblScanOutput.xml -c -T' 

Однако, как видно по логам, текущая проблема является Логин. Вы используете надежное соединение, но знаете ли вы, какой идентификатор запускает процесс bcp, когда он генерируется движком SQL Server? Это, скорее всего, идентификатор SQL Server, который, как я полагаю, не имеет доступа к базе данных/таблице (и наиболее вероятной является локальная система или сетевая служба). Если вы все еще хотите сделать это с помощью SQL-запроса, а не пакетного файла (.bat или .cmd), я предлагаю вам использовать явные учетные данные для входа (SQL Server auth) и не доверенное соединение.

Смежные вопросы