Sql server Can';t将复杂的XML文件插入SQL Server表
我有一个如下所示的存储过程:Sql server Can';t将复杂的XML文件插入SQL Server表,sql-server,xml,Sql Server,Xml,我有一个如下所示的存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Sp_ComplexXml] AS BEGIN DECLARE @XmlString xml SET @XmlString = '<ArrayOfSizeColorQuantityViewModel> <ProductId>012312</Product
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Sp_ComplexXml]
AS
BEGIN
DECLARE @XmlString xml
SET @XmlString =
'<ArrayOfSizeColorQuantityViewModel>
<ProductId>012312</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
将ANSI_空值设置为ON
去
在上设置带引号的\u标识符
去
改变程序[dbo]。[Sp_ComplexXml]
作为
开始
声明@XmlString xml
SET@XmlString=
"
我不知道我在解析XML代码方面是否有任何问题?
如果你不介意的话,你能帮我找到它吗
感谢您的善意帮助请尝试以下代码:
SELECT
SCQ.node.value('(../ProductId)[1]', 'bigint') as 'ProductID',
SCQ.node.value('(ColorId)[1]', 'varchar(4)') 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)
我刚刚从第二个XPath中删除了一个前导的/
(在交叉应用中),并且我还将ColorId
值的长度扩展到varchar(4)
(以允许正确显示“blue”)
现在,我从选择中获得此输出:
旁注:存储过程不应使用sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀@我的天啊。我会仔细读的。它很有魅力。谢谢你的帮助:D