/ / XML Parsing View - SQL-Server, XML, TSQL, Dynamic-SQL, XML-Import

XML Parsing View - sql-server, xml, tsql, dynamische-sql, xml-import

Schönen Tag

Ich habe eine Abfrage, die den Inhalt anzeigt und sortiertvon meinem SQL. Es ist einfach, wenn Sie wissen, was die XML-Datei ist, aber ich versuche, die XML-Datei als Parameter zu erstellen, weil es nicht immer gleich ist. Wie kann ich den Parameter zum Pfad hinzufügen? Ich habe es versucht, aber es sagt, es sei falsch.

Dies ist der Code in einer Ansicht, die funktioniert:

   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)

Ich versuche, dies zu einer gespeicherten Prozedur hinzuzufügen:

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

Wenn ich meinen Parameter als @ p1 hinzufüge, funktioniert es nicht.

Vielen Dank.

Ruan

Antworten:

0 für die Antwort № 1

Sie müssen die gesamte Anweisung dynamisch erstellen:

--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

Tipp 1: ich habe mich verändert SINLGE_BLOB zu SINLGE_CLOB

Tipp 2: Sie müssen das Ergebnis in XML umwandeln, bevor Sie es als XML verwenden.
Es ist eine gute Übung, Abgüsse zu machen nach der Import Fehler zu vermeiden, kaum zu finden ...