2013-01-09 43 views
1

我需要以下方面的帮助,因为我对SQL中XML的知识不存在。以下是生成表格和数据的表格脚本。TSQL XML FUNCTION

在XML中有一个名称属性为“RequiredField”的XML元素,我需要创建一个TSQL函数来返回value属性中包含的值。 请任何人都可以协助。

CREATE TABLE [MyTable] 
([UniqueID] INT PRIMARY KEY IDENTITY(1,1) NOT NULL, 
    [Description] VARCHAR(50) NOT NULL, 
    [MetaData] XML NOT NULL) 
INSERT INTO [MyTable] 
([Description], [MetaData]) 
SELECT 'My Description 1', '<properties xmlns="http://schemas.myschema.com/propertyInfo/additionalPropertyInfo.xsd"><item name="PropertyName" value="Property1" /><item name="RequiredField" value="true" /></properties>' 
UNION 
SELECT 'My Description 2', '<properties xmlns="http://schemas.myschema.com/propertyInfo/additionalPropertyInfo.xsd"><item name="PropertyName" value="Property2" /></properties>' 

正如你所看到的第二行不包含该元素,所以它应该返回一个空值。 我似乎在查询的圈子里跑来跑去,除了命名空间部分还没有取得很大的进展,但即使是我不知道是正确的。

所以沿着这个

CREATE FUNCTION GetRequiredFieldValue(@uniqueID INT) 
    RETURNS BIT 
AS 
... 

回答

2

线的东西试试这个:

create function GetRequiredFieldValue(@uniqueID INT) returns bit 
as 
begin 
    declare @Ret bit; 

    with xmlnamespaces(default 'http://schemas.myschema.com/propertyInfo/additionalPropertyInfo.xsd') 
    select @Ret = MetaData.value('(/properties/item[@name = "RequiredField"])[1]/@value', 'bit') 
    from MyTable 
    where UniqueID = @UniqueID; 

    return @Ret; 
end 
+0

绝对完美的,太感谢你了! –

+0

我无法相信它实际上很简单,我写的查询要复杂得多,现在谢谢你,我对TSQL中的XML实现有了更好的理解。所以再一次,谢谢。 –

+0

@Jonathan有点改变了XPath,所以你可以指定'bit'作为values函数的数据类型。我认为这是一个更好的版本。 –