-1

SQL Server 2005 で XML 列をクエリしようとしています

列に格納されている非常に長い文字列があり、それは XML です。特定のアイテムの可視性が true に設定されているかどうかを確認したい。

これを行う方法について何か考えはありますか?

このスタック エディターはコードが気に入らないため、すべての XML を含む文字列を投稿できません。

ありがとう

select ステートメントと結果を示す写真を添付し​​ました。case 式から、私が何をしようとしているのかがわかります。

ここに画像の説明を入力

問題は、設定列に列の名前が表示されることですが、その列の可視性が(colFirstChoiceVendorPaymentTerms)trueに設定されているかどうかなどを確認したい...

4

2 に答える 2

0

質問への回答は、使用している xml スキーマに大きく依存します。たとえば、属性 xml を次のように使用している場合:

'<Item ID="1" Visibility="1" />'

次のクエリでアイテムをフィルタリングできます。

select *
from temp
where data.exist('Item[@Visibility = "1"]') = 1

これを見てsql fiddle demo

xml の正確なスキーマが得られない限り、これ以上正確に回答することは困難です。


アップデート

したがって、DevExpress 設定 xml がデータベース内に保存されているようです。したがって、単純化された xml が次のような場合:

<XtraSerializer version="1.0" application="View">
  <property name="Columns" iskey="true" value="9">
    <property name="colFirstChoiceVendorPaymentTerms" isnull="true" iskey="true">
      <property name="Visible">true</property>
    </property>
    <property name="colSecondChoiceVendorPaymentTerms" isnull="true" iskey="true">
      <property name="Visible">false</property>
    </property>
  </property>
</XtraSerializer>

次に、次のようにクエリできます。

select
data.value('(XtraSerializer/property/property[@name="colFirstChoiceVendorPaymentTerms"]/property[@name="Visible"])[1]', 'bit') as first,

data.value('(XtraSerializer/property/property[@name="colSecondChoiceVendorPaymentTerms"]/property[@name="Visible"])[1]', 'bit') as second
from temp

sql fiddle demo


更新 2

データ型が text/varchar の場合は、次を試してください。

select
    c.data_xml.value('(XtraSerializer/property/property[@name="colFirstChoiceVendorPaymentTerms"]/property[@name="Visible"])[1]', 'bit') as first,
    c.data_xml.value('(XtraSerializer/property/property[@name="colSecondChoiceVendorPaymentTerms"]/property[@name="Visible"])[1]', 'bit') as second
from temp as t
    outer apply (select cast(t.data as xml) as data_xml) as c
于 2013-11-22T11:01:35.187 に答える
0

このコードを試してください:

SELECT 
  CAST(data as XML).exist('//XtraSerializer//property[@name="colFirstChoiceVendorPaymentTerms"]/property[@name=''Visible'' and text()=''true'']') as col1,
  CAST(data as XML).exist('//XtraSerializer//property[@name="colSecondChoiceVendorPaymentTerms"]/property[@name=''Visible'' and text()=''true'']') as col2
  FROM TBL
于 2013-11-22T11:08:31.113 に答える