2011-03-11 118 views
1

有沒有辦法使用SQLXML檢查XML字段中元素的值是否爲空值?你看我在表中Test的列Conf以下數據:如何檢查XML元素是否具有空字符串值的屬性

<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; 

回答

1

使用XPath 1.0。 string(@someattribute)測試應該返回false如果爲空。我對SQLXML一無所知,但如果您可以使用控制序列,它將會工作。

+0

'字符串length'功能做這項工作。 – 2011-03-14 08:36:44

1

可能這會工作。

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

這檢查是否存在與@value = ''數據元素。

0

問題不在於XPath,而在於TSQL語法。

XML.Exist返回一個BIT數據類型,指示它是否存在。 SQL Server沒有本地BOOLEAN數據類型(一個真正的/錯誤)。

所以,您的查詢應該是

SELECT CASE WHEN Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')='' 
     THEN 1 ELSE 0 END 
FROM Test;