修剪 MS SQL Server 中 xml 列中的值

IT *_*her 2 sql-server-2008 xml sql-server xquery trim

我有一个带有 XML 列的数据库。我正在尝试更新(修剪) xml 列的 xml 值。我在 Windows、SQL Server 2008 Express 上运行。

我没有找到任何直接在 Xquery 中修剪的方法,所以我尝试通过选择该值。这是 SQL

select RTRIM(LTRIM(col2.value('(/Root/Row/Rowid/text())[1]','varchar(20)')))
from   dbo.T1
Run Code Online (Sandbox Code Playgroud)

但是现在我不知道如何更新这个 xml 值。

有没有办法直接修剪xml值?如果不是,我该如何修剪价值?

我不是要更新表中的单行,而是要修剪表中所有行的 xml 值

wBo*_*Bob 8

您可以使用sql:column函数和公共表表达式 (CTE)来做到这一点,如下所示:

CREATE TABLE #tmp ( col2 XML )

INSERT INTO #tmp ( col2 )
VALUES ( '<Root>
    <Row>
        <Rowid>trim this value    </Rowid>
    </Row>
</Root>' )


SELECT 'before' s, *
FROM #tmp

;WITH cte AS
(
SELECT col2, RTRIM( LTRIM( col2.value('(/Root/Row/Rowid/text())[1]','VARCHAR(20)' )))  trimmedColumn
FROM #tmp
)
UPDATE cte
SET col2.modify('replace value of (Root/Row/Rowid/text())[1] with sql:column("trimmedColumn")')


SELECT 'after' s, *
FROM #tmp

-- Cleanup
DROP TABLE #tmp
Run Code Online (Sandbox Code Playgroud)

我的结果: 更新后的结果