CREATE TABLE Customers
(
[CustomerID] [int] IDENTITY(1,1) NOT NULL,
[CustomerName] [varchar](64) NULL,
[AddressXML] [xml] NULL
)
go
-- insert
truncate table Customers
insert into Customers values ('TestCustomer',
'<CustomerAddress Id="1">
<line1>abc1</line1>
<line2>xyz1</line2>
<line3>1234561</line3>
</CustomerAddress>
<CustomerAddress Id="2">
<line1>abc2</line1>
<line2>xyz3</line2>
<line3>1234563</line3>
</CustomerAddress>
')
-- query()
SELECT AddressXML.query ('/CustomerAddress[@Id = 1]')
FROM Customers
-- Value()
SELECT * FROM Customers
WHERE AddressXML.value('(/CustomerAddress/line1)[1]', 'nvarchar(1000)') ='abc1'
-- exist()
SELECT * FROM Customers
WHERE AddressXML.exist ('/CustomerAddress[@Id = 1]') = 1
-- Modify()
UPDATE Customers SET AddressXML.modify('
insert <Line4>Newline</Line4>
after (/CustomerAddress/line3)[1]')
-- 첫번째(1) 배열의 id 열에 값을 100 으로 변경
UPDATE Customers SET AddressXML.modify('
replace value of (/CustomerAddress/@Id)[1] with 1' )
-- nodes(), 공통 xml
SELECT AddressXML.query('.')as nodes
FROM Customers
CROSS APPLY AddressXML.nodes('/CustomerAddress') as MyNodes(a)
DECLARE @x xml
SET @x='<Root>
<row id="1"><name>Larry</name><oflw>some text</oflw></row>
<row id="2"><name>moe</name></row>
<row id="3" />
</Root>'
SELECT T.c.query('.') AS result
FROM @x.nodes('/Root/row') T(c)
SELECT T.c.query('..') AS result
FROM @x.nodes('/Root/row') T(c)