Ich übergebe XML an gespeicherte Prozedur SQL Server und versuche, es in Tabelle zu speichern.Mit OpenXML arbeiten
Die gespeicherte Prozedur ist unten angegeben:
EXEC sp_xml_preparedocument @i OUTPUT
,@XMLDOC
SELECT Id
,UserId
,ModifiedOn
,ModifiedBy
,ModifiedIp
,DetailId
INTO #temp
FROM OPENXML(@i, '/Root/Rec/Detail', 1) WITH (
id INT '../@Id'
,UserId INT '../@UserId'
,ModifiedOn DATETIME '../@ModifiedOn'
,ModifiedBy INT '../@ModifiedBy'
,ModifiedIp VARCHAR(15) '../@ModifiedIp'
,DetailId INT '@DetailId'
)
EXEC sp_xml_removedocument @i
select * from #temp
und die Probe von XML:
<root>
<rec id="I001" userid="316" modifiedon="9/10/2016 02:33:56 PM" modifiedby="316" modifiedip="::1" UserDetail="System.Collections.Generic.List`1[Dto.UserDetail]">
</rec>
</root>
Wenn die XML-Kind-Knoten enthält (detail
), wird dieser SP funktionieren. Wenn ich keine Kindknoten habe, wird es nicht funktionieren. Können Sie darauf hinweisen, wo ich falsch gelaufen bin?
Wenn das XML untergeordnete Knoten enthält, wird dieses SP einwandfrei funktionieren. Wenn ich keine Kind-Knoten habe, wird es nicht funktionieren –
Dies sieht aus wie ein [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Die ganze Frage schreit "falsche Herangehensweise!". Zunächst einmal: 'FROM OPENXML' ist veraltet und sollte nicht mehr verwendet werden. Es gibt viel bessere Methoden. Zweitens, wenn Sie mit 'XML' arbeiten wollen, sollten Sie den entsprechenden Datentyp verwenden, nicht' VARCHAR (MAX) '(was noch schlimmer ist, da Sonderzeichen nicht korrekt behandelt werden). Ich schlage vor: Starten Sie eine neue Frage. Erkläre, was du hast, erkläre, was du willst und was du bisher versucht hast. Geben Sie ein Beispiel und die erwartete Ausgabe an. – Shnugo