Сохранение / экспорт XML - SQL Server - Направление копирования должно быть "in", "out" или "format"

Я пытаюсь экспортировать XML, сгенерированный из SQL-запроса. Я пытаюсь вот так

 EXEC master.dbo.sp_configure 'show advanced options', 1
 RECONFIGURE
 EXEC master.dbo.sp_configure 'xp_cmdshell', 1
 RECONFIGURE 
 EXEC xp_cmdshell 'bcp "SELECT @xml" -S <SERVERNAME> -D <DATABASE_NAME> -U <UserName> -P <PASSWORD> queryout "E:\test.xml" -T -c -t,'

пытаясь это, я получил результат, указанный ниже

 Copy direction must be either 'in', 'out' or 'format'.
 usage: bcp {dbtable | query} {in | out | queryout | format} datafile
 [-m maxerrors]            [-f formatfile]          [-e errfile]
 [-F firstrow]             [-L lastrow]             [-b batchsize]
 [-n native type]          [-c character type]      [-w wide character type]
 [-N keep non-text native] [-V file format version] [-q quoted identifier]
 [-C code page specifier]  [-t field terminator]    [-r row terminator]
 [-i inputfile]            [-o outfile]             [-a packetsize]
 [-S server name]          [-U username]            [-P password]
 [-T trusted connection]   [-v version]             [-R regional enable]
 [-k keep null values]     [-E keep identity values]
 [-h "load hints"]         [-x generate xml format file]
 [-d database name]        [-K application intent]

Я не смог выяснить проблему.

Мои вопросы-

  1. Что я делаю не так?

  2. Как сохранить / экспортировать XML в файл на диске?

1 ответ

Я не уверен, что вы пытаетесь сделать с этой командой:

exec xp_cmdshell 'bcp "SELECT @xml" -S <SERVERNAME> -D <DATABASE_NAME> -U <UserName> -P <PASSWORD> queryout "E:\test.xml" -T -c -t,

То, что я могу вам сказать, сразу же неправильно:

  • Вы смешиваете аутентификацию с -T и также -U -P

  • Ваш запрос "select @xml" недействителен

Вы можете попробовать что-то вроде:

exec xp_cmdshell 'bcp "Select [test1]=1 for xml path" queryout e:\test.xml -T -c'

test.xml будет выглядеть так:

 <row><test1>1</test1></row>

И построить до того, какой выход вы ищете.

По умолчанию xp_cmdshell выполняется на сервере как учетная запись службы сервера sql, хотя учетную запись прокси можно настроить.

Вы можете посмотреть в for xml чтобы убедиться, что вы говорите серверу sql, как вы хотите, чтобы xml форматировался.

Рекомендации:

Другие вопросы по тегам