http://www.cnblogs.com/stevenshi/archive/2009/12/23/1630413.html
最近比較忙,一直擱淺了,今天補上XML Insert 操作,對於XML的操作很多,這裏只能列出一些常用的,不閒扯了,直接上代碼:
補充一下:如果在XML 根節點中定義了命名空間,那麼在操作的語句中也需要定義。
前天有個朋友說我的腳本不能運行,查看了一下,原來我在做最後兩個操作語句時,在XML 上定義了命名空間,導致前面的語句都不能識別XML.
給大家帶來的誤解,敬請諒解。
SET @xml='<root xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/users">
<user>
<userid>1</userid>
<userName>test1</userName>
</user>
</root>'
INSERT INTO Users(UserInfo)VALUES(@xml)
UPDATE Users SET UserInfo.modify('
declare namespace UI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/users";
insert <UI:user>
<UI:firstName>steven2</UI:firstName>
</UI:user> as first
into (/UI:root)[1]')
SELECT * FROM Users
UPDATE Users SET UserInfo.modify('
declare namespace UI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/users";
insert attribute ID { "55" }
into (/UI:root/UI:user)[1]')
SELECT * FROM Users
CREATE DATABASE mytest;
GO
USE mytest;
GO
--創建測試表
CREATE TABLE Users
(
ID INT IDENTITY(1,1),
UserInfo XML
)
/*****************插入單節點*****************************/
---插入測試數據
DECLARE @xml XML
SET @xml='<root>
<user>
<userid>1</userid>
<userName>test1</userName>
</user>
</root>'
INSERT INTO Users(UserInfo)VALUES(@xml)
--select * from Users
--添加address節點,默認添加在所有節點之後
UPDATE Users SET UserInfo.modify('insert <address>shanghai</address>
into (/root/user)[1]')
SELECT * FROM Users
--添加address節點,節點順序爲第一個
UPDATE Users SET UserInfo.modify('insert <address>shanghai</address> as first
into (/root/user)[1]')
SELECT * FROM Users
--添加address節點,節點順序爲最後一個
UPDATE Users SET UserInfo.modify('insert <address>shanghai</address> as last
into (/root/user)[1]')
SELECT * FROM Users
--添加address節點到某個節點之後
UPDATE Users SET UserInfo.modify('insert <address>shanghai</address>
after (/root/user/userid)[1]')
--添加address節點到某個節點之前
UPDATE Users SET UserInfo.modify('insert <address>shanghai</address>
before (/root/user/userid)[1]')
SELECT * FROM Users
---注:[1] 代表第一個item
/*****************插入多節點*****************************/
--添加firstName and LastName,以,分割
UPDATE Users SET UserInfo.modify('insert (<firstName>steven</firstName>,
<lastName>shi</lastName>) into (/root/user)[1]')
SELECT * FROM Users
/*****************插入節點屬性*****************************/
---在USER 節點插入ID 屬性,並且值=1
UPDATE Users SET UserInfo.modify('insert attribute ID {"1"}
into (/root/user)[1]')
SELECT * FROM Users
---在USER 節點插入ID 屬性,值爲一個變量,這個應該更常用
declare @uid float
set @uid=0.5
UPDATE Users SET UserInfo.modify('insert attribute UID {sql:variable("@Uid")}
into (/root/user)[1]')
SELECT * FROM Users
---如果插入多個屬性,需要用,分割
declare @aid float,@bid float
set @aid=0.5
set @bid=0.6
UPDATE Users SET UserInfo.modify('insert (attribute aid {sql:variable("@aid")},
attribute bid {sql:variable("@bid")}
)
into (/root/user)[1]')
SELECT * FROM Users
/*****************插入節點註釋*****************************/
---insert 註釋
UPDATE Users SET UserInfo.modify('insert <!-- 註釋 -->
before (/root/user/userid[1])[1]')
SELECT * FROM Users
/*****************插入處理指令*****************************/
UPDATE Users SET UserInfo.modify('insert <?Program = "A.exe" ?>
before (/root)[1]')
SELECT * FROM Users
/*****************插入CDATA*****************************/
UPDATE Users SET UserInfo.modify('insert <C><![CDATA[<city>北京</city> or cdata]]> </C>
after (/root/user)[1]')
SELECT * FROM Users
/*****************插入文本*****************************/
UPDATE Users SET UserInfo.modify('insert text{"插入文本"} as first
into (/root/user)[1]')
SELECT * FROM Users
/*****************根據 if 條件語句進行插入*****************************/
---判斷屬性值
UPDATE Users SET UserInfo.modify('insert if(/root/user[@ID=1]) then (<tel>888888</tel>)
else (<qq>66666</qq>)
into (/root/user)[1]')
SELECT * FROM Users
----判斷節點Value
UPDATE Users SET UserInfo.modify('insert if(/root/user[firstName="steven1"]) then (<tel>1111</tel>)
else (<qq>2222</qq>)
into (/root/user)[1]')
SELECT * FROM Users
----判斷user 節點數是否小於等於10
UPDATE Users SET UserInfo.modify('insert if (count(/root/user)<=10) then element user { "This is a new user" }
else () as last
into (/root)[1]')
SELECT * FROM Users
/*****************將節點插入類型化的 xml 列中*****************************/