我正在将数据从遗留的MySQL数据库导入Server 2005。
我有一张桌子特别让我伤心。我使用链接服务器和MySQL ODBC驱动程序从MySQL导入了它,最后得到如下结果:
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:
EXEC sp_tableoption 'OrderItem', 'large value types out of row', 1然后,我继续将XMLData转换为VARCHAR(MAX),并对存储在该字段中的XML进行一些清理。目前为止一切都很好。
但是,当我现在尝试将该列转换为XML数据类型时:
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.奇怪.总之,现在工作-感谢各位的意见和建议!非常感谢!
发布于 2010-08-05 10:41:21
如果您有足够的存储空间,您可以尝试从表的VARCHAR(MAX)版本中选择一个新表,该表具有相同的模式,但XMLData设置为XML --可以使用SELECT INTO,或者在开始之前显式地创建该表。
PS --这是一个与您的问题无关的附带问题,但您可能希望通过这种转换检查是否丢失了原始MySQL XMLData字段中的Unicode字符,因为文本/varchar数据类型不支持这些字符。
发布于 2010-08-05 10:56:42
您能添加一个xml类型的新列吗?
如果是这样的话,添加新的xml列,更新表以设置与XmlData列相等的新列,然后删除XmlData列。
编辑
我有一个带有"nvarchar(max)“列的表"TestTable”。
select * from sys.tables where name = 'TestTable'这一结果包括:
[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:
exec sp_tableoption 'OrderItems', 'text in row', 0然后尝试从nvarchar(max)切换到xml。
从波尔
禁用行中的文本选项或减少选项的限制将需要对所有BLOB进行转换;因此,根据必须转换的BLOB字符串的数量,进程可以是长的。表在转换过程中被锁定。
。
https://stackoverflow.com/questions/3413117
复制相似问题