XMLをに格納する正当な理由があるかもしれません[n]varchar(max)
。XMLのみを保存する場合はまったく問題ありませんが、TSQLを使用してXMLの一部を変更する場合、またはXMLに値を照会する必要がある場合、またはwhere句でノード/属性値を使用する必要がある場合は、XMLに切り替える必要があります。データのインデックスを利用して、型変換をスキップできます。は非推奨であるためtext
、少なくともデータ型をに切り替えることを検討する必要があります[n]varchar(max)
XML列にデータがある場合は、XMLDMLを使用してXMLを変更します。あなたの場合、あなたはこのようなの置換値を使用するでしょう。
update tbl_Module_RequestForms_Items
set XMLData.modify('replace value of (/Record/Submitted/text())[1] with "True"')
where XMLData.value('(/Record/Submitted)[1]', 'bit') = 0
不可能なXMLデータ型がないと、XMLドキュメント全体を抽出し、それを変更してから、変更されたXMLドキュメントでテーブルを更新する必要があります。
もちろん、ある種のクライアント開発ツールを使用してそれを行うことができますが、TSQLでも可能です。
tbl_Module_RequestForms_Items
主キーfromとXMLData列を使用して、データ型XMLとしてテーブル変数を宣言します。
tbl_Module_RequestForms_Items
からの行を、更新する必要のあるテーブル変数にコピーします。
- を使用してXMLを更新します
replace value of
。
- 変更をに適用し直し
tbl_Module_RequestForms_Items
ます。
ID
これがの主キーでtbl_Module_RequestForms_Items
あり、XMLデータが列にあると私が想定しているこのようなものXMLData
:
declare @T table
(
ID int primary key,
XMLData xml
)
insert into @T
select M.ID,
M.XMLData
from tbl_Module_RequestForms_Items as M
where cast(cast(XMLData as nvarchar(max)) as xml).value('(/Record/Submitted)[1]', 'bit') = 0
update @T
set XMLData.modify('replace value of (/Record/Submitted/text())[1] with "True"')
update M
set XMLData = cast(T.XMLData as nvarchar(max))
from tbl_Module_RequestForms_Items as M
inner join @T as T
on M.ID = T.ID