0

我正在尝试将 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>

到这个 sp 函数:

ALTER PROCEDURE dbo.SaveRideOfferCoordinates
    (
    @rideOfferId Int,
    @coordinatesXml ntext
    )
AS

declare @idoc int;

exec sp_xml_preparedocument @idoc out, @coordinatesXml


SELECT X,Y

into #temp

from openxml(@idoc, '/Coordinates/row',1) 

  with (

         X real,

         Y real

       )



insert into RideOfferCoordinates select @rideOfferId, X, Y from #temp

drop table #temp

RETURN 0

这应该X="34.9116" Y="32.30498"首先插入到表中,但它首先插入X="34.855790000000006" Y="32.32117"X="34.9116" Y="32.30498"最后插入。

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

4

1 回答 1

0

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

如果您需要“顺序”,则将“序数”列添加到表和传入数据中。

我认为您需要“保证”,而不是“我当然希望如此”。

编辑_ - - -

如果您使用的是 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)
于 2013-05-28T12:51:56.523 回答