/ / Parsowanie XML - sql-server, xml, tsql, dynamic-sql, xml-import

Widok analizy XML - sql-server, xml, tsql, dynamic-sql, xml-import

Dobry dzień

Mam zapytanie, które wyświetla i sortuje zawartośćmojego SQL. To proste, jeśli wiesz, czym jest plik xml, ale próbuję utworzyć plik xml jako parametr, ponieważ nie zawsze jest taki sam. Jak mogę dodać parametr do ścieżki? Próbowałem, ale mówi, że jest niepoprawny.

To jest kod w widoku, który działa:

   select
c3.value("@CtlgID","nvarchar(50)") AS "ID",
c4.value("@label","nvarchar(50)") AS "ID",
c5.value("@label","nvarchar(50)") AS "ID"
from
(
select
cast(c1 as xml)
from
OPENROWSET (BULK "C:ISPbinENXMLCataloghimenuCat_756.xml",SINGLE_BLOB) as T1(c1)

)as T2(c2)
cross apply c2.nodes("/node") T3(c3)
cross apply c2.nodes("/node/node") T4(c4)
cross apply c2.nodes("/node/node/node") T5(c5)

Próbuję dodać to do procedury przechowywanej:

PROCEDURE [dbo].[Update_ISP_Child]
-- Add the parameters for the stored procedure here
@p1 nvarchar(50) = "menuCat_756.xml"
AS
BEGIN

select
c3.value("@CtlgID","nvarchar(50)") AS "ID",
c4.value("@label","nvarchar(50)") AS "ID",
c5.value("@label","nvarchar(50)") AS "ID"
from
(
select
cast(c1 as xml)
from
OPENROWSET (BULK "C:ISPbinENXMLCataloghi" + @p1,SINGLE_BLOB) as T1(c1)

)as T2(c2)
cross apply c2.nodes("/node") T3(c3)
cross apply c2.nodes("/node/node") T4(c4)
cross apply c2.nodes("/node/node/node") T5(c5)

END

Kiedy dodaję mój parametr jako @ p1, to nie działa.

Dzięki.

Ruan

Odpowiedzi:

0 dla odpowiedzi № 1

Musisz dynamicznie budować całe oświadczenie:

--the file"s name
DECLARE @filename VARCHAR(250)="menuCat_756.xml";

--a tolerant staging table to help us get the result of EXEC
DECLARE @staging TABLE(TheXml NVARCHAR(MAX));

--a dynamically created command
DECLARE @cmd NVARCHAR(MAX)=
N"select c1
from OPENROWSET (BULK ""C:ISPbinENXMLCataloghi" + @filename + """,SINGLE_CLOB) as T1(c1)";

--This will shift the "result set" (which is one single XML) into our staging table
INSERT INTO @staging
EXEC(@cmd);

--Test it
SELECT * FROM @staging

Wskazówka 1: Zmieniłem SINLGE_BLOB do SINLGE_CLOB

Wskazówka 2: Musisz rzucić wynik do XML zanim użyjesz go jako XML.
Dobrą praktyką jest wykonywanie rzutów po import, aby uniknąć błędów, których nie można znaleźć ...