软件水平考试:SQLServer2005的XML数据类型之基础篇[3]
|
|
|
|
|
SET @doc.modify(' insert <Pitcher role="Starter" name="Jaret Wright"/> before (/Team/Players/Pitcher)[1] ') | 这个into子句把InsertExpression作为LocationExpression的一个孩子结点插入。可选子句as first和as last用于指定在该孩子结点中插入的位置:
--在小组内进行插入
SET @doc.modify(' insert <Pitcher role="Starter" name="Jaret Wright"/> into (/Team/Players)[1] ') | --在小组内进行插入,指定它应该
--作为最后一个元素插入
SET @doc.modify(' insert <Pitcher role="Starter" name="Jaret Wright"/> as last into (/Team/Players)[1] ') | delete语句的语法很直接:
delete LocationExpression | 这个LocationExpression指定要从XML数据中删除什么内容。例如,要删除所有的投球手:
SET @doc.modify('delete/Team/Player/Pitcher') | 因为查询指定所有的投球手元素,所以它们将被全部删除。如果你想仅删除一个元素,那么你可以指定标识属性。例如,为了仅删除投球手John Smoltz,你可以编写如下的delete语句:
SET @doc.modify(' delete /Team/Players/Pitcher[@name="John Smoltz"] ') | 你可以使delete语句删除单个属性。例如,为了删除针对投球手John Smoltz的role属性,相应的XML DML看上去如下所示:
SET @doc.modify(' delete /Team/Players/Pitcher[ @name="John Smoltz"]/@role') | 最后,replace value语句描述了对XML数据的修改。这个replace value语句的语法如下:
replace value of OriginalExpression with ReplacementValue | if | 这个replace value语句用来修改在XML中的值。唯一可能的值是一个标签的内容或一个属性的值。这个OriginalExpression必须解析为单个结点或属性。这个ReplacementValue通常是一个要代替的值。代替一个结点的内容要求使用text()函数的XQuery表达式来指定你想代替一个结点的文本。例如,为了替换一个投球手的内部文本(inner text),你可以编写类似如下的Modify语句:
DECLARE @doc xml SELECT @doc = ' <Team name="Braves"> <Players> <Pitcher name="John Smoltz" role="Closer"> With team since 1989 </Pitcher> </Players> </Team>' SET @doc.modify(' replace value of (/Team/Players/Pitcher[ @name="John Smoltz"]/text())[1] with "May start in 2005" ') | 修改属性是直接的:你只需要使用XQuery表达式来解析单个属性。例如,为了使用"Starter"替换投球手John Smoltz的role属性的值,你可以编写如下的语句:
SET @doc.modify(' replace value of (/Team/Players/Pitcher[ @name="John Smoltz"]/@role)[1] with "Starter" ') | replace value语法也支持条件替换,这可以通过在replace value语句的with子句内使用if…then…else语法实现。例如,如果John Smoltz是一个Closer的话,把他的role替换为Starter;但是如果他不是一个Starter的话,则把role属性修改为Closer;那么,你可以编写如下的代码:
SET @doc.modify(' replace value of (/Team/Players/Pitcher[ @name="John Smoltz"]/@role)[1] with ( if (/Team/Players/Pitcher[ @name="John Smoltz"]/@role = "Closer") then "Starter" else "Closer"
| |
|
我要投稿 新闻来源: 编辑: 作者: |
|
相关新闻 |
|
|
|
|
|