2013-01-09 71 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函數的數據類型。我認爲這是一個更好的版本。 –