首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UPDATE语句中设置变量,然后在xml.modify()语句中使用该变量?

如何在UPDATE语句中设置变量,然后在xml.modify()语句中使用该变量?
EN

Stack Overflow用户
提问于 2020-08-05 17:10:58
回答 1查看 52关注 0票数 2

下面是一些演示数据,我认为解决方案会是这样的:

代码语言:javascript
复制
CREATE TABLE #lookup_table (
    lookup_key VARCHAR(10),
    lookup_value VARCHAR(10)
);

INSERT INTO #lookup_table ( lookup_key, lookup_value )
    VALUES
        ( 'key1', 'value1' ),
        ( 'key2', 'value2' ),
        ( 'key3', 'value3' ),
        ( 'key4', 'value4' ),
        ( 'key5', 'value5' );

CREATE TABLE #dest_table (
    lookup_key VARCHAR(10),
    xml_data XML
);

INSERT INTO #dest_table (lookup_key, xml_data)
    VALUES
        ('key1', '<root><value /></root>'),
        ('key2', '<root><value /></root>'),
        ('key3', '<root><value /></root>'),
        ('key4', '<root><value /></root>'),
        ('key5', '<root><value /></root>')

-- Code in question --
DECLARE @value VARCHAR(10);

UPDATE #dest_table
SET @value = LT.lookup_value,
    xml_data.modify('insert text{sql:variable("@value")} into (./root/value)[1]')
FROM #dest_table DT
INNER JOIN #lookup_table LT
ON DT.lookup_key = LT.lookup_key;

SELECT * from #dest_table;

从我的研究来看,这是可行的,但由于某种原因,@value总是设置为NULL,并且节点没有更新:

代码语言:javascript
复制
lookup_key  xml_data
key1        <root><value /></root>
key2        <root><value /></root>
key3        <root><value /></root>
key4        <root><value /></root>
key5        <root><value /></root>

如果我添加一个输出并使用SELECT @value跟踪查询,我们会看到变量确实被设置了--表中的最后一个条目被显示--但是输出是空的:

代码语言:javascript
复制
DECLARE @value VARCHAR(10);

UPDATE #dest_table
SET @value = LT.lookup_value,
    xml_data.modify('insert text{sql:variable("@value")} into (./root/value)[1]')
OUTPUT @value
FROM #dest_table DT
INNER JOIN #lookup_table LT
ON DT.lookup_key = LT.lookup_key;

SELECT @value

输出的屏幕快照:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 18:18:35

@GSerg提供了一种完美的替代解决方案--消除变量并使用sql:column("LT.lookup_value")而不是sql: variable ()。

代码语言:javascript
复制
UPDATE #dest_table
SET xml_data.modify('insert text{sql:column("LT.lookup_value")} into (./root/value)[1]')
FROM #dest_table DT
INNER JOIN #lookup_table LT
ON DT.lookup_key = LT.lookup_key;

假设其他人也是如此,我仍然很有兴趣了解问题中提出的解决办法为什么行不通。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63270230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档