如何将数据库表的XML列数据插入至同结构表,以及读取XML节点属性至含Title和Value列的表
从XML列提取数据插入目标表 & 复制XML列到同结构表的解决方案
我来帮你搞定这两个SQL操作的需求,直接上实用的代码和清晰的解释:
1. 提取XML中的Title和Value属性插入目标表
你的prs_Decrees表里的Bookmarks列是XML类型,里面嵌套了多个<Bookmark>节点,每个节点都带Title和Value属性。我们可以用SQL Server的XQuery功能来解析这些属性,然后批量插入到你的目标表中。
假设你的目标表叫TargetBookmarks,结构是(Title VARCHAR(255), Value VARCHAR(255)),直接用下面的语句就行:
INSERT INTO TargetBookmarks (Title, Value) SELECT BookmarkNode.value('@Title', 'VARCHAR(255)') AS Title, BookmarkNode.value('@Value', 'VARCHAR(255)') AS Value FROM prs_Decrees CROSS APPLY Bookmarks.nodes('/Bookmarks/Bookmark') AS Bookmarks(BookmarkNode);
简单说下逻辑:
nodes('/Bookmarks/Bookmark')会把XML里的每个<Bookmark>节点拆成单独的行,这样就能逐个处理每个书签value('@Title', 'VARCHAR(255)')用来提取节点的Title属性值,第二个参数是要转换成的SQL数据类型,你可以根据实际数据长度调整类型或长度(比如用NVARCHAR或者更大的长度)CROSS APPLY用来关联原表和拆分后的节点行,保证每一个书签节点都被提取出来插入目标表
2. 将XML列数据复制到同结构的其他表
如果目标表和prs_Decrees的结构完全一致(比如也有一个Bookmarks XML列),那操作就非常简单,用常规的INSERT...SELECT语句就能批量复制:
INSERT INTO TargetDecrees (Bookmarks) -- 如果还有其他需要同步的列,直接加在括号里就行 SELECT Bookmarks FROM prs_Decrees;
举个例子,如果目标表还有ID、CreateTime这类列需要一起复制,就改成:
INSERT INTO TargetDecrees (ID, Bookmarks, CreateTime) SELECT ID, Bookmarks, CreateTime FROM prs_Decrees;
内容的提问来源于stack exchange,提问作者mehrab habibi
相关产品推荐
相关产品推荐

