Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储过程中的OpenXml函数不会按给定顺序向表中插入值_Sql Server_Xml_Stored Procedures_Insert - Fatal编程技术网

Sql server 存储过程中的OpenXml函数不会按给定顺序向表中插入值

Sql server 存储过程中的OpenXml函数不会按给定顺序向表中插入值,sql-server,xml,stored-procedures,insert,Sql Server,Xml,Stored Procedures,Insert,我试图将X,Y坐标列表插入到RideOfferCoordinates表中,但存储过程函数总是以相同的顺序插入它们,而不管它们发送的顺序如何 我将坐标作为xml字符串发送: < Coordinates> < row X="34.9116" Y="32.30498"/> < row X="34.91151" Y="32.305420000000005"/> < row X="34.85826" Y="32.328250000000004"/> <

我试图将X,Y坐标列表插入到RideOfferCoordinates表中,但存储过程函数总是以相同的顺序插入它们,而不管它们发送的顺序如何

我将坐标作为xml字符串发送:

< Coordinates>
< row X="34.9116" Y="32.30498"/>
< row X="34.91151" Y="32.305420000000005"/>
< row X="34.85826" Y="32.328250000000004"/>
< row X="34.855790000000006" Y="32.32117"/>
< /Coordinates>
这将首先在表中插入X=34.9116 Y=32.30498,但它将首先插入X=34.85579000000006 Y=32.32117,最后插入X=34.9116 Y=32.30498


我唯一的猜测是sp出于某种原因根据X值以升序方式插入它们。

为什么需要按特定顺序插入它们?您是否需要按特定顺序在某个点检索它们?你怎么能保证呢

如果需要排序,则向表和传入数据添加序号列

我想你需要的是一份保证书,而不是一份我希望如此的保证书

编辑_---

如果您使用的是Sql Server 2005或更高版本……。您应该放弃OPENXML

-- Declare XML variable

DECLARE @data XML;

-- Element-centered XML

SET @data = N'

<Coordinates>
<row X="34.9116" Y="32.30498" Ordinal="1" />
<row X="34.91151" Y="32.305420000000005" Ordinal="2" />
<row X="34.85826" Y="32.328250000000004" Ordinal="3" />
<row X="34.855790000000006" Y="32.32117" Ordinal="4" />
</Coordinates>

';




SELECT  
        T.childEntity.value('(@X)[1]', 'decimal(16,7)') AS XCoordinate
        ,       T.childEntity.value('(@Y)[1]', 'decimal(16,7)') AS YCoordinate
        ,       T.childEntity.value('(@Ordinal)[1]', 'int') AS MyOrdinal
FROM @data.nodes('Coordinates/row') AS T(childEntity)

坐标表示路线,其中第一个是起点,最后一个是终点。然而,现在我想你是对的,这真的有点冒险。我试试你的解决办法。谢谢:您使用的是哪个版本的Sql Server?谢谢!!你帮了大忙。很抱歉耽搁了
-- Declare XML variable

DECLARE @data XML;

-- Element-centered XML

SET @data = N'

<Coordinates>
<row X="34.9116" Y="32.30498" Ordinal="1" />
<row X="34.91151" Y="32.305420000000005" Ordinal="2" />
<row X="34.85826" Y="32.328250000000004" Ordinal="3" />
<row X="34.855790000000006" Y="32.32117" Ordinal="4" />
</Coordinates>

';




SELECT  
        T.childEntity.value('(@X)[1]', 'decimal(16,7)') AS XCoordinate
        ,       T.childEntity.value('(@Y)[1]', 'decimal(16,7)') AS YCoordinate
        ,       T.childEntity.value('(@Ordinal)[1]', 'int') AS MyOrdinal
FROM @data.nodes('Coordinates/row') AS T(childEntity)