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 № 1Sie 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 ...