MSSQL의 XML을 사용하고 있으므로 XML 유형 .query()
함수에 익숙해야합니다. .query('.')
의 결과를 사용
IF NOT EXISTS (SELECT 1
FROM sys.objects
WHERE name = 'XMLParty'
AND type = 'U')
BEGIN
--DROP TABLE dbo.XMLParty;
CREATE TABLE dbo.XMLParty
(
ID INTEGER IDENTITY(1, 1) NOT NULL,
PRIMARY KEY (ID),
Summary XML
);
END;
INSERT INTO dbo.XMLParty (Summary)
VALUES ('<Summary><Field Key="Surname" Value="S1" /><Field Key="Action" Value="N" /></Summary>');
INSERT INTO dbo.XMLParty (Summary)
VALUES ('<Summary><Field Key="Surname" Value="S2" /><Field Key="Action" Value="Y" /></Summary>');
GO
SELECT ID,
Surname = Summary.value('(./Summary/Field/@Value)[ 1 ]', 'VARCHAR(MAX)'),
Value = Summary.value('(./Summary/Field/@Value)[ 2 ]', 'VARCHAR(MAX)'),
Summary.query('.')
FROM dbo.XMLParty;
단순히 Summary
열을 선택으로, 모든면에서 절대적으로 동일하지만 구문은 당신에게 당신이 원하는 결과에 대한 .value()
기능을 사용하는 방법에 대한 통찰력을 줄 것입니다. xmlField.value('(./Root/Node/@Attribute)[ n ]', 'VARCHAR(MAX)')
와) 위의 완료로 (.
은 XML의 루트이며, 거기에서, 당신은 (xmlField.value('(./Root/Node)[ n ]', 'VARCHAR(MAX)')
를 노드 값을 조회 또는 속성을 수 있습니다.
는 XML과 같은
<R><N><A v="1" /><A v="2" /></N><N><A v="3" /></N></R>
를 사용하는 경우 같은 개는 다수가있다
, .value('(./R/N/A/@v)[ 3 ]', 'VARCHAR(MAX)')
하지 않습니다 심지어 A 노드가 다른 N 노드 (레벨에만 신경을 써야 함)에 있다는 것을 원격으로 관리하지만, .query()
을 사용하면 많은 정보를 얻을 수 있습니다.
안녕하세요. 도움말 섹션 (http://stackoverflow.com/help/how-to-ask)을 읽어보십시오. 불행히도 이것은 매우 낮은 품질의 질문입니다. 의미있는 세부 사항 (데이터베이스 플랫폼 등)을 제공하지는 않습니다. 귀하의 질문은 XML에 대해 묻지 만 XML 데이터는 표시하지 않습니다. 도움말 섹션을 읽고 질문을 업데이트하십시오. – OldProgrammer
XML 데이터 추출은 플랫폼에 따라 다릅니다. 우리는 독자들을 염두에 두지 않으므로 우리에게 말하면 도움이 될 것입니다. – OldProgrammer