Sql server SQL Server-尝试将列转换为XML失败
我正在将数据从传统的MySQL数据库导入SQLServer2005 我有一张特别的桌子让我很伤心。我使用一个链接服务器和MySQL ODBC驱动程序从MySQL导入了它,结果是:Sql server SQL Server-尝试将列转换为XML失败,sql-server,sql-server-2005,data-migration,Sql Server,Sql Server 2005,Data Migration,我正在将数据从传统的MySQL数据库导入SQLServer2005 我有一张特别的桌子让我很伤心。我使用一个链接服务器和MySQL ODBC驱动程序从MySQL导入了它,结果是: Col Name Datatype MaxLen OrderItem_ID bigint 8 PDM_Structure_ID int 4 LastModifiedDate datetime 8 LastModifiedUser varchar
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:
然后我继续将XMLData
转换为VARCHAR(MAX)
,并对存储在该字段中的XML进行一些清理。到目前为止一切都很好
但当我现在尝试将该列转换为XML数据类型时:
ALTER TABLE dbo.OrderItem
ALTER COLUMN XMLData XML
我在这里得到这个信息:
Msg 511,第16级,状态1,第1行无法创建大小为8077的行,该行 大于允许的最大值 行大小为8060。该声明已经发布 已经终止 这相当令人惊讶,除了
XMLData
之外的列只占大约90个字节,我特别指示SQL Server将所有“大数据”存储在行外
那么,究竟为什么SQLServer拒绝将该列转换为XML数据???有什么想法吗??思想??在我的方法中可以检查/更改的内容
更新:我不知道发生了什么变化,但在第二次尝试将原始数据从MySQL导入SQL Server时,我最终成功地将该NTEXT->VARCHAR(MAX)列转换为XML。。。。。古怪的anyhoo-现在就可以工作了-谢谢大家的意见和建议!非常感谢 如果您有足够的存储空间,可以尝试从表的
VARCHAR(MAX)
版本中选择一个新表,该表具有相同的架构,但XMLData设置为XML
——可以使用SELECT-into
,也可以在开始之前显式创建表
PS-这是一个与您的问题无关的次要问题,但您可能希望检查通过此转换,原始MySQL XMLData字段中的Unicode字符没有丢失,因为text/varchar数据类型不支持这些字符。您可以添加一个新的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)字段中保存500k个字符
如果为OrderItems表查询sys.tables,会得到什么
如果[text_in_row_limit]不为零,请尝试此操作,它会将任何现有的行内字符串转换为BLOB:
exec sp_tableoption 'OrderItems', 'text in row', 0
然后尝试从nvarchar(max)切换到xml
来自BOL
禁用“行中文本”选项或
降低期权的限制将
要求转换所有BLOB;
因此,这个过程可能很长,
取决于BLOB的数量
必须转换的字符串。这个
表在转换过程中被锁定
过程
我尝试了这个方法——只提取ID和XML——效果很好。但是,我无法将其恢复到原始表中(再次出现相同错误)@marc_s-您能否成功地将整个表复制到新表中,包括转换?如果是这样的话,你可以放弃原来的代码。你有复制这个的示例代码吗?@Ed Harper:我可以给你我的代码片段,但棘手的是:这段代码在三个表上运行得很好,只在有问题的那一个表上失败。。。。
exec sp_tableoption 'OrderItems', 'text in row', 0