2013-01-09 2 views
1

. 아래는 테이블과 데이터를 생성하는 테이블 스크립트입니다. TSQL SQL 내에서 XML의 내 지식이 존재하지 않는이기 때문에 나는 다음과 같은 도움이 필요 XML 기능

는 XML에서 "RequiredField"의 이름 속성을 가진 XML의 요소가, 내가 값 속성에 포함 된 값을 반환하는 TSQL 함수를 작성해야합니다. 누구든지 도와주십시오.

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

두 번째 행에는 해당 요소가 포함되어 있지 않으므로 null 값을 반환해야합니다. 는 내가 쿼리에서 빙빙 실행하는 것, 정말 네임 스페이스 부분 외에 많은 진전을 havent 한하지만, 심지어 메신저 확실하지가 권리입니다.

그래서이

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를 조금 변경하여 values ​​함수의 데이터 유형으로 'bit'를 지정할 수 있습니다. 나는 이것이 더 나은 버전이라고 생각한다. –

관련 문제