1

SQLXML を使用して XML フィールドの要素の値が空のサイズであることを確認する方法はありますか? Confテーブルの列に次のデータがあるとしますTest

<Conf>
  <UserData>
    <data type="str" value="" />
  </UserData>
</Conf>

data次の SQL 要求を使用して存在を確認できます。

SELECT Test.Conf.exist('/Conf/UserData/data') FROM Test;

dataしかし、空の があることを確認するにはどうすればよいvalueですか? 次のようなものになる可能性がありますが、機能しません。

SELECT Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')='' FROM Test;

私の最終的な解決策は、次の SQL ステートメントを使用することです。

SELECT Test.Conf.value('string-length(/Conf[1]/UserData[1]/data[1]/@value)', 'int') FROM Test;
4

3 に答える 3

1

おそらくこれでうまくいくでしょう。

SELECT Test.Conf.exist('data(/Conf/UserData/data[@value=''''])') FROM Test;

これは、データ要素が存在するかどうかを確認し@value = ''ます。

于 2011-03-11T20:56:08.453 に答える
1

XPath 1.0 を使用します。string(@someattribute)空の場合、test は false を返す必要があります。私は SQLXML について何も知りませんが、制御シーケンスを使用できれば機能します。

于 2011-03-11T20:56:38.157 に答える
0

問題はXPathではなく、TSQL構文にあります。

XML.ExistBITデータ型を返し、それが存在するかどうかを示します。SQL ServerにはネイティブのBOOLEANデータ型(実際のtrue / false)はありません。

だから、あなたのクエリは

SELECT CASE WHEN Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')=''
       THEN 1 ELSE 0 END
FROM Test;
于 2011-03-11T22:19:22.470 に答える