一个比较头疼的问题。

robake 2012-09-12 05:43:57
现在在使用c#做SQL Server同步工具,使用了
Insert into table select * from [192.168.0.74].[p].[dbo].[table]语句

使用了链接服务器,现在由于表的数目多,数据库,所以,上述语句也是动态的。

现在有部分表里有些xml类型的列,导致运行上述语句的时候报:

分布式查询不支持xml数据类型。远程“[192.168.0.74].[p].[dbo].[table]”包含xml列。


请教高手,有何办法解决。
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coleling 2012-09-13
  • 打赏
  • 举报
回复
你反正都用的是动态语句,那就继续拼SQL嘛。

比如针对一个表,从sys.columns中取出列名(name)、数据类型(system_type_id),看到system_type_id=241的,就在外面套上cast(colname as nvarchar(max)),不就可以了么
robake 2012-09-13
  • 打赏
  • 举报
回复
但是现在的问题是有多个列是这样子的,但列名我并不知道,这个有没有办法。可否给出示例
coleling 2012-09-13
  • 打赏
  • 举报
回复
1、针对XML列:将XML列转换成varchar(max)或nvarchar(max)

2、针对XML文件:使用OPENROWSET
發糞塗牆 2012-09-13
  • 打赏
  • 举报
回复
用xquery提取出来行不行?
cde32 2012-09-13
  • 打赏
  • 举报
回复
不懂~~友情帮顶!!!
刚给你发的私信,我那个问题已经解决了!
robake 2012-09-13
  • 打赏
  • 举报
回复
自己找到解决办法了:

在使用链接服务器获取远程数据库的XML字符的数据,插入到本地数据表的XML字段时,数据提示

消息 9514,级别 16,状态 1,第 4 行
分布式查询不支持 Xml 数据类型。远程对象 'test_srv.test.dbo.testtable'包含 xml 列。

这时如果你用下列语句转换:

select convert (varchar(8000),xml ) as xml from test_srv.test.dbo.testtable

同样报上面的错误!

这时只需要在源数据库中建立一个视图VIEW:

careate view tmp_xml
as

select convert (varchar(8000),xml ) as xml from testtable

再在目标库中执行:

select * from test_srv.test.dbo.tmp_xml

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧