tabla pasar manejo leer extraer ejemplos desde datos crear archivo xml sql-server-2012 export-to-xml

pasar - Puede exportar datos de SQL Server 2012 a un archivo XML



pasar un archivo xml a tabla sql (2)

A continuación se muestra un pequeño ejemplo de SQL y XML, pero no hay idea de cómo exportar esto en decir C: / Users / Simon.Evans / Documents / Test.xml. Para ser justos, tengo muy poco o ningún conocimiento de XML, así que caminar en la oscuridad. En definitiva, estoy tratando de encontrar una forma de exportar tablas SQL en un archivo XML.

SELECT patient.OID AS ''@ID'', patient.FORENAME, patient.SURNAME, patient.TITLECODE, patient.BIRTHDTTM FROM HealthBI.dbo.LZO_PATIENT patient WHERE patient.OID = ''3400000000'' FOR XML PATH(''Patient''), ROOT(''Patient'')

y la salida XML del sql es:

<Patient> <Patient ID="3400000000"> <FORENAME>IDA</FORENAME> <SURNAME>CARR</SURNAME> <TITLECODE>CC_MRS</TITLECODE> <BIRTHDTTM>1929-10-25T00:00:00</BIRTHDTTM> </Patient> </Patient>


Así que @dSQL sería tu SQL Statment @LocalPath & @Filename sería la ruta y el nombre del archivo (recuerda en el servidor).

Puede ver los resultados del comando BCP en la tabla # + bcpOutput.

Select @CreateXmlFileCommand = ''bcp "'' + @dSQL + ''" queryout '' + @LocalPath + @FileName + '' -c -r -t -T -'' + @@SERVERNAME; select @CreateXmlFileCommand CREATE TABLE #_bcpOutput ([Output] VARCHAR(250)); INSERT Into #_bcpOutput ([Output]) EXEC master..xp_cmdshell @CreateXmlFileCommand;


La consulta de XML en un archivo necesita saber un poco sobre la codificación de caracteres ...

Prueba esto:

USE master; GO CREATE DATABASE TestDB; GO CREATE TABLE TestDB.dbo.TestTbl(TestString1 VARCHAR(100),TestString2 NVARCHAR(100)); INSERT INTO TestDB.dbo.TestTbl VALUES(''abc'', N''abc'') ,(''<&> Russian: "слов в тексте"'', N''<&> Russian: "слов в тексте"''); GO SELECT * FROM TestDB.dbo.TestTbl FOR XML PATH(''Test''),ROOT(''String''); /* The result of the simple SELECT shows, that VARCHAR cannot deal with russian letters <String> <Test> <TestString1>abc</TestString1> <TestString2>abc</TestString2> </Test> <Test> <TestString1>&lt;&amp;&gt; Russian: "???? ? ??????"</TestString1> <TestString2>&lt;&amp;&gt; Russian: "слов в тексте"</TestString2> </Test> </String> */ GO --Two times the same command, only difference is -w instead of -c: --And: YOU HAVE TO FULLY QUALIFY THE OBJECT''s NAME! DECLARE @cmd1 VARCHAR(4000)=''bcp "SELECT * FROM TestDB.dbo.TestTbl FOR XML PATH(''''object''''),ROOT(''''objects'''');" queryout "c:/dvp/test1.xml" -T -c -S'' + @@SERVERNAME; DECLARE @cmd2 VARCHAR(4000)=''bcp "SELECT * FROM TestDB.dbo.TestTbl FOR XML PATH(''''object''''),ROOT(''''objects'''');" queryout "c:/dvp/test2.xml" -T -w -S'' + @@SERVERNAME; EXECUTE master..xp_cmdshell @cmd1; EXECUTE master..xp_cmdshell @cmd2; GO DROP DATABASE TestDb; GO

El resultado del primer comando con -c ahora destruirá las letras rusas incluso con NVARCHAR

<objects> <object> <TestString1>abc</TestString1> <TestString2>abc</TestString2> </object> <object> <TestString1>&lt;&amp;&gt; Russian: "???? ? ??????"</TestString1> <TestString2>&lt;&amp;&gt; Russian: "???? ? ??????"</TestString2> </object> </objects>

El resultado del segundo comando con -w es el esperado:

<objects> <object> <TestString1>abc</TestString1> <TestString2>abc</TestString2> </object> <object> <TestString1>&lt;&amp;&gt; Russian: "???? ? ??????"</TestString1> <TestString2>&lt;&amp;&gt; Russian: "слов в тексте"</TestString2> </object> </objects>