Sql server 将字符串转换为xml并插入Sql Server

Sql server 将字符串转换为xml并插入Sql Server,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我们有一个SQL Server 2008 R2数据库表,其中XML存储在VARCHAR数据类型的列中 我现在必须获取xml的一些元素 因此,我想首先将存储为VARCHAR数据类型的xml转换为存储为xml数据类型的xml 例如: 表A Id(int) , ProductXML (varchar(max)) 表B Id(int), ProductXML(XML) 我想将表A中的产品XML转换为XML数据类型,并插入表B 我尝试使用CAST()和CONVERT()函数,如下所示: insert

我们有一个SQL Server 2008 R2数据库表,其中XML存储在
VARCHAR
数据类型的列中

我现在必须获取xml的一些元素

因此,我想首先将存储为
VARCHAR
数据类型的xml转换为存储为
xml
数据类型的xml

例如:

表A

Id(int) , ProductXML (varchar(max))
表B

Id(int), ProductXML(XML)
我想将
表A
中的
产品XML
转换为XML数据类型,并插入
表B

我尝试使用
CAST()
CONVERT()
函数,如下所示:

insert into TableB (ProductXML)
select CAST(ProductXML as XML) from TableA;
同样,我尝试转换,但我得到一个错误

XML分析:无法切换编码

是否有任何方法可以将表中的
varchar
项转换为XML项

关于XML:它是巨大的,有许多节点,其结构是动态变化的


示例:一行可以包含一个产品的和XML条目,另一行可以包含多个产品的XML条目。

给我们一个XML示例,因为所有这些都可以:

CONVERT(XML, '<root><child/></root>')
CONVERT(XML, '<root>          <child/>         </root>', 1)
CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)
SQLServer在内部以高效的二进制表示形式表示XML,该表示形式使用UTF-16编码。用户提供的编码不保留,但在解析过程中会被考虑

解决方案:

CONVERT(XML, CONVERT(NVARCHAR(max), ProductXML))
这对我很有用:

select CAST(REPLACE(CAST(column3 AS NVARCHAR(MAX)),'utf-8','utf-16') AS XML) from table

非常感谢。我仍在阅读您编写的所有内容。xml实际上是动态变化的。它可以包含单个产品或多个产品的xml信息。我刚才举了一个例子。实际上,它是一个日志记录表,表中存储了不同的日志记录数据(xmls)。数据库设置的编码是什么?很抱歉,我是新手。我运行了我在网上找到的以下命令来查找数据库编码selectdatabasepropertyex('DBName','Collation')SQLCollation;我得到了“SQL拉丁语通用CPCI”这是你要的吗?是的,看起来很好。我想知道您的源列是否使用了某种不可直接编码为Unicode的编码类型。。。在识别正确编码的同时,编写一个C#实用程序来传输数据需要几分钟的时间。还有,你试过只使用一条记录吗?不知道我怎么会错过这个,但是xml在一开始就有。。现在你所说的一切都有道理了。它的utf-16编码。你猜我现在怎么做?你是在替换字符串,而不是文档的编码。
select CAST(REPLACE(CAST(column3 AS NVARCHAR(MAX)),'utf-8','utf-16') AS XML) from table