0

这一切都在 SQL Server 2012 上。

我有 TSQL 来创建一个 XQuery 语句来切碎并插入一些 XML

代码看起来像这样:

declare @xmlasXML xml
set @xmlasXML = '
      <data Store="R262">
        <s Item1="10" Item2="-1" />
        <s Item1="33.2" Item2="55"  />
      </data>
'

insert TableX(OldPrice, Price) 
   select 
      c.value('@Item1[1]','decimal(15,2)') as OldPrice, 
      c.value('@ut[1]','int') as Price
   FROM 
      @xmlasXML.nodes('/data/s') T(c)

我想在上面的插入语句中添加一些数据验证(我不想登陆数据然后不得不再次搅动它来验证每个数据点)......

当我说数据验证时,这就是我所说的:

  • 如果 Item1 的值介于 1 和 15 之间,则将其用于插入,否则插入 NULL
  • 如果 Item2 的值介于 -10 和 1000 之间,则将其用于插入,否则插入 NULL。

我看到了一些关于 XQuery 的信息,我认为 XQuery 具有可以处理的条件逻辑,但我发现的示例都与我构建和执行INSERT/SELECT语句的方式不符。

如果有更好的方法,我完全赞成 - 只要我不必两次粉碎数据。

在此先感谢您的时间!希望有人可以帮我解决这个问题!

4

1 回答 1

1
declare @xmlasXML xml
    set @xmlasXML = '
          <data Store="R262">
            <s Item1="10" Item2="-1" />
            <s Item1="33.2" Item2="55"  />
          </data>';

;with TMP as (
    select c.value('@Item1[1]','decimal(15,2)') as OldPrice,
           c.value('@ut[1]','int') as Price
      FROM @xmlasXML.nodes('/data/s') T(c)
)
    insert TableX (OldPrice, Price) 
    select case when OldPrice between 1 and 15 then OldPrice end,
           case when Price between -1 and 1000 then Price end
      from TMP;
于 2013-04-18T03:37:50.117 回答