0

これはすべて SQL Server 2012 上にあります。

XQueryステートメントを作成してXMLを細断して挿入するTSQLがあります

コードは次のようになります。

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ステートメントを作成して実行する方法と一致する例は見つかりませんでした。

より良い方法があれば、データを 2 回細断処理す​​る必要がない限り、すべて賛成です。

お時間をいただきありがとうございます。誰かが私がこれをノックアウトするのを手伝ってくれることを願っています!

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 に答える