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 関数とCommon Table Expression(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