2013-04-18 129 views
0

之前,这是所有SQL Server 2012年SQL服务器的XQuery检查数据值插入

我有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) 

我想添加一些数据验证成以上的INSERT语句(我不想降落的数据,然后又有通过它流失,以验证每一个数据点)...

当我在这里说的数据验证是我在说什么:

  • 如果项目1的值是1到15之间,然后用它来插入,否则插入NULL
  • IF为项目2的值介于 - 10和1000然后用它来插入,否则插入NULL。

我看到的XQuery我认为,XQuery的具有可以处理,但条件逻辑的一些信息没有我发现对齐与我建立并当仁不让INSERT/SELECT声明的方式的例子。

如果还有更好的办法,我会全力支持 - 只要我不必两次撕碎数据。

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

回答

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;