Ich habe eine gespeicherte Prozedur wie folgt:Kann nicht komplexe XML-Datei in SQL Server-Tabelle einfügen
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Sp_ComplexXml]
AS
BEGIN
DECLARE @XmlString xml
SET @XmlString =
'<ArrayOfSizeColorQuantityViewModel>
<ProductId></ProductId>
<SizeColorQuantityViewModel>
<ColorId>Red</ColorId>
<SizeAndQuantities>
<SizeAndQuantity>
<SizeId>S</SizeId>
<Quantity>1</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>M</SizeId>
<Quantity>2</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>L</SizeId>
<Quantity>3</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>XL</SizeId>
<Quantity>4</Quantity>
</SizeAndQuantity>
</SizeAndQuantities>
</SizeColorQuantityViewModel>
<SizeColorQuantityViewModel>
<ColorId>Blue</ColorId>
<SizeAndQuantities>
<SizeAndQuantity>
<SizeId>S</SizeId>
<Quantity>1</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>M</SizeId>
<Quantity>2</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>L</SizeId>
<Quantity>3</Quantity>
</SizeAndQuantity>
<SizeAndQuantity>
<SizeId>XL</SizeId>
<Quantity>4</Quantity>
</SizeAndQuantity>
</SizeAndQuantities>
</SizeColorQuantityViewModel>
</ArrayOfSizeColorQuantityViewModel>'
INSERT INTO ProductSizeColor(ProductID, SizeID, ColorID, Quantity)
SELECT
SCQ.node.value('(../ProductId)[1]', 'bigint') as 'ProductID',
SCQ.node.value('(ColorId)[1]', 'varchar(3)') as 'ColorID',
SQ.i.value('(SizeId)[1]', 'varchar(3)') as 'SizeID',
SQ.i.value('(Quantity)[1]', 'int') as 'Quantity'
FROM
@XmlString.nodes('/ArrayOfSizeColorQuantityViewModel/SizeColorQuantityViewModel') as SCQ(node)
CROSS APPLY
SCQ.node.nodes('/SizeAndQuantities/SizeAndQuantity') as SQ(i)
END
Und ich versuche, diese komplexen XML-Daten an unten stehenden Tabelle einzufügen:
Tabelle: (3 Fremdschlüssel)
ich weiß nicht, ob ich irgendein Problem mit Parse XML-Code oder nicht? Wenn es dir nichts ausmacht, könntest du mir bitte helfen, es herauszufinden?
Vielen Dank für Art helfen
Side Hinweis: Sie sollten ** nicht ** verwenden, um den 'sp_' Präfix für gespeicherte Prozeduren. Microsoft hat [dieses Präfix für seine eigene Verwendung reserviert (siehe * Gespeicherte Prozeduren benennen *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx), und Sie riskieren irgendwann in der Zukunft einen Namenskonflikt. [Es ist auch schlecht für die Leistung Ihrer gespeicherten Prozedur] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Es ist am besten, einfach 'sp_' zu vermeiden und etwas anderes als Präfix zu verwenden - oder gar kein Präfix! –
@marc_s OMG. Ich werde es sorgfältig lesen –