首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server试图将列转换为XML失败

问Server试图将列转换为XML失败
EN

Stack Overflow用户
提问于 2010-08-05 08:53:40
回答 2查看 2.1K关注 0票数 3

我正在将数据从遗留的MySQL数据库导入Server 2005。

我有一张桌子特别让我伤心。我使用链接服务器和MySQL ODBC驱动程序从MySQL导入了它,最后得到如下结果:

代码语言:javascript
复制
Col Name          Datatype  MaxLen
OrderItem_ID       bigint      8
PDM_Structure_ID   int         4
LastModifiedDate   datetime    8
LastModifiedUser   varchar    20
CreationDate       datetime    8
CreationUser       varchar    20
XMLData            text       -1
OrderHeader_ID     bigint      8
Contract_Action    varchar    10
ContractItem       int         4

我的主要关注点是XMLData列--我需要清理它并制作它,这样我就可以将它转换为XML数据类型,以便在它上使用XQuery。

因此,我将表选项“行外的大数据”设置为1:

代码语言:javascript
复制
EXEC sp_tableoption 'OrderItem', 'large value types out of row', 1

然后,我继续将XMLData转换为VARCHAR(MAX),并对存储在该字段中的XML进行一些清理。目前为止一切都很好。

但是,当我现在尝试将该列转换为XML数据类型时:

代码语言:javascript
复制
ALTER TABLE dbo.OrderItem
   ALTER COLUMN XMLData XML

我在这里收到这样的信息:

Msg 511,16级,状态1,第1行

无法创建大于允许的最大行大小8060的8077行。声明已被终止。

这是相当令人惊讶的,看到除了XMLData以外的列只占了大约90个字节,我特别指示Server将所有“大数据”存储在行外.

那么,为什么Server拒绝将该列转换为XML数据呢?有什么主意吗?思想??我可以检查/改变我的方法的东西??

更新:我不知道发生了什么变化,但是在第二次尝试将原始数据从MySQL导入到Server时,我成功地将NTEXT -> VARCHAR(MAX)列转换成了MySQL.奇怪.总之,现在工作-感谢各位的意见和建议!非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-05 10:41:21

如果您有足够的存储空间,您可以尝试从表的VARCHAR(MAX)版本中选择一个新表,该表具有相同的模式,但XMLData设置为XML --可以使用SELECT INTO,或者在开始之前显式地创建该表。

PS --这是一个与您的问题无关的附带问题,但您可能希望通过这种转换检查是否丢失了原始MySQL XMLData字段中的Unicode字符,因为文本/varchar数据类型不支持这些字符。

票数 1
EN

Stack Overflow用户

发布于 2010-08-05 10:56:42

您能添加一个xml类型的新列吗?

如果是这样的话,添加新的xml列,更新表以设置与XmlData列相等的新列,然后删除XmlData列。

编辑

我有一个带有"nvarchar(max)“列的表"TestTable”。

代码语言:javascript
复制
 select * from sys.tables where name = 'TestTable'

这一结果包括:

代码语言:javascript
复制
 [lob_data_space_id] [text_in_row_limit] [large_value_types_out_of_row]
 1                   0                   0

然而,我可以很高兴地在我的nvarchar(max)字段中保存500 k字符。

如果您查询sys.tables以获取OrderItems表,您会得到什么?

如果您的text_in_row_limit不是零,请尝试此操作,这将将现有的行内字符串转换为BLOB:

代码语言:javascript
复制
exec sp_tableoption 'OrderItems', 'text in row', 0

然后尝试从nvarchar(max)切换到xml。

从波尔

禁用行中的文本选项或减少选项的限制将需要对所有BLOB进行转换;因此,根据必须转换的BLOB字符串的数量,进程可以是长的。表在转换过程中被锁定。

。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3413117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档