标签: xquery-update

Sql Xquery如何替换更新查询中的文本

表名为 MasterTable

ID类型BIGINT,

Nametype VARCHAR(200)(xml由于某些原因存储类型数据)

Name 包含结构化的数据

<en-US>SomeEnglishText</en-US><it-IT>SomeItalicText</it-IT>

当我需要UpdateMaster表,然后在那个时候我需要转换Varcharxml那么有条件更新/更换value即或者特定标签的一部分en-US / it-IT.

还有一些机会,没有任何数据/标签有没有在Name列,所以我想在插入数据会的时间Insert清空表像标签元素<en-US></en-US><it-IT></it-IT>,所以update查询必须处理空值,即在标签元素en-US/it-IT.

我想像下面的更新查询一样.

DECLARE @Str VARCHAR(200)

SET @Str = 'Test Text'

UPDATE [MasterTable]
SET [Name] = cast([MasterTable].[Name] as xml).modify('replace value of (en-US/text())[1] with sql:variable("@Str")')
WHERE [ID]=18
Run Code Online (Sandbox Code Playgroud)

运行查询时出现以下错误

非法使用xml数据类型方法'修改'.在此上下文中期望非变异方法.

sql-server xquery-sql xquery-update sql-update

10
推荐指数
1
解决办法
1万
查看次数

使用Basex在XML中插入数据

我在BaseX中存储了两个XML文档,即医院和办公室.

以下是办公室xml:

<Staff>
    <Employee Name="Brian">
        <Personal>
            <SSN> 666-66-6666 </SSN>
        </Personal>
        <StaffInfo>
            <Position> Doctor </Position>
            <AccountableTo> David </AccountableTo>
        </StaffInfo>
    </Employee>
    <Employee Name="David">
        <Personal>
            <SSN> 555-55-5555 </SSN>
        </Personal>
        <StaffInfo>
            <Position> Doctor </Position>
            <AccountableTo />
        </StaffInfo>
    </Employee>
</Staff>
Run Code Online (Sandbox Code Playgroud)

在这个XML中,我想添加一个或多个员工.如何使用BaseX添加元素?

xquery xml-database xquery-update basex

6
推荐指数
1
解决办法
4496
查看次数

如何使用 xquery 替换属性的值

我有一个xml文档如下

<users>
  <user test="oldvalue">
   <userid>sony</userid>
   <name>vijay</name>
  </user>
</users>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个 xquery 来 1) 找到具有给定 userid 的用户 - sony 2) 将给定用户的“test”属性的值更改为“newvalue”。

我正在尝试以下操作:(其中 doc_name = xml 文档的名称,userid = sony)

declare variable $doc_name as xs:string external;
declare variable $userid as xs:string external;
let $users_doc := doc($doc_name)/users

let $old := $users_doc/user[userid=$userid]/@test="oldvalue"
let $new := $users_doc/user[userid=$userid]/@test="newvalue"

return replace node $old with $new
Run Code Online (Sandbox Code Playgroud)

我看到以下错误: [XUTY0008] 预期作为替换目标的单个元素、文本、属性、注释或 pi。

我该如何解决?

xquery xquery-update

4
推荐指数
1
解决办法
9843
查看次数

XQuery Update:根据节点是否存在而插入或替换?

我正在尝试构建简单的XML数据库(在BaseX或eXist-db中),但我无法确定如何修改文档中的值:

内容很简单,因为测试:

<p>
    <pl>
        <id>6></id>
    </pl>
</p>
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建类似函数的东西,<pl>如果元素不存在则会插入元素,如果存在则替换它.但XQuery给了我麻烦:

当我尝试使用if-then-else逻辑时:

if (exists(/p/pl[id=6]/name)=false)
then insert node <name>thenname</name> into /p/pl[id=6]
else replace value  of node /p/pl[id=6]/name with 'elsename'
Run Code Online (Sandbox Code Playgroud)

我收到错误Error: [XUDY0027] Replace target must not be empty.显然我很困惑,为什么在两种情况下评估else部分,因此错误.当我清空其他部分时:

if (exists(/p/pl[id=6]/name)=true)
    then insert node <name>thenname</name> into /p/pl[id=6]
    else <dummy/>
Run Code Online (Sandbox Code Playgroud)

然后我明白了Error: [XUST0001] If expression: no updating expression allowed.

当我尝试声明更新功能时,即使它报告错误:

declare namespace testa='test';

declare updating function testa:bid($a, $b)
{
if (exists(/p/pl[id=6]/name)=true)
    then insert node <name>thenname</name> into /p/pl[id=6]
    else <dummy/>
};

testa:bid(0,0)
Run Code Online (Sandbox Code Playgroud)

Error: …

xquery xquery-update exist-db basex

3
推荐指数
1
解决办法
2万
查看次数

BaseX中如何将结果与更新操作一起返回?

我认识到使用 BaseX 客户端执行的 ( insert/ delete)-XQueries 始终返回空字符串。我发现这非常令人困惑或不直观。

有没有办法找出查询是否“成功”,而无需再次查询数据库(并使用可能有错误的“传递”逻辑,例如“如果我删除了一个节点,则 XML 中必须有 'oldNodeCount-1' 节点”) ?

xquery xquery-update basex

3
推荐指数
1
解决办法
1107
查看次数