Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-尝试将列转换为XML失败_Sql Server_Sql Server 2005_Data Migration - Fatal编程技术网

Sql server SQL Server-尝试将列转换为XML失败

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

我正在将数据从传统的MySQL数据库导入SQLServer2005

我有一张特别的桌子让我很伤心。我使用一个链接服务器和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:

然后我继续将
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