Sql-Server

在 MS SQL Server 中修剪 xml 列中的值

  • June 24, 2016

我有一個帶有 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

但現在我不知道如何更新這個 xml 值。

有沒有辦法直接修剪 xml 值?如果不是,我該如何修剪價值?

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

您可以使用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

我的結果: 更新後的結果

引用自:https://dba.stackexchange.com/questions/141916