1
我有一個存儲過程如下圖所示:無法插入複雜的XML文件導入到SQL Server表
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
我嘗試插入這個複雜的XML數據見下表:
表: (3個外鍵)
我不知道我是否有解析XML代碼有任何問題嗎? 如果你不介意你能幫我找出答案嗎?
感謝樣幫助
旁註:你應該** **不使用'sp_'前綴爲您的存儲過程。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並使用別的東西作爲前綴 - 或者根本沒有前綴! –
@marc_s OMG。我會仔細閱讀它 –