我们在其中一个存储XML文件的表中有nText字段。我们能够在nText字段中保存大约40-50 MB的大型XML。但是,当我们尝试像 那样选择从archive_id = 123的存档中选择archive_xml时,超时。在SQL中超时读取大nText列
任何替代或任何建议?
感谢, Ĵ
我们在其中一个存储XML文件的表中有nText字段。我们能够在nText字段中保存大约40-50 MB的大型XML。但是,当我们尝试像 那样选择从archive_id = 123的存档中选择archive_xml时,超时。在SQL中超时读取大nText列
任何替代或任何建议?
感谢, Ĵ
当你说这是超时,它是超时在服务器上或者在你的代码?这可能影响不同的解决方案
如果它是一个服务器的问题,确保表中有您所查询的字段(例如archive_id)
,如果它在代码超时“简单”的解决方案是延长用户的连接超时有意义的指标。我会先尝试其他的东西,比如提高服务器性能,因为连接超时通常会隐藏更大的问题。
根据MSDN 如果ntext,文本和图像数据值不超过Unicode,则为4,000个字符;字符,8000个字符;或二进制字符串(8,000字节),可以在SELECT,UPDATE和INSERT语句中引用该值,这与更小的数据类型的引用方式大致相同。例如,可以在SELECT语句选择列表中引用具有短值的ntext列,这与引用nvarchar列的方式相同。必须遵守一些限制,例如不能直接引用WHERE子句中的ntext,text或image列。这些列可以包含在WHERE子句中作为返回另一个数据类型(例如ISNULL,SUBSTRING或PATINDEX)的函数的参数,或者包含在IS NULL,IS NOT NULL或LIKE表达式中。
处理大数据值 但是,当ntext,text和image数据值变大时,它们必须逐块处理。 Transact-SQL和数据库API都包含允许应用程序逐块处理ntext,text和image数据的函数。
数据库API按照处理长的ntext,文本和图像列的一种通用的模式:
要读取长列,应用程序只包括NTEXT,文字,或在选择图像列列表,然后将该列绑定到一个足够大的程序变量,以保存合理的数据块。应用程序然后执行该语句,并使用API函数或方法一次将数据检索到绑定变量中。
要编写长列,应用程序将执行带有参数标记(?)的INSERT或UPDATE语句,以替换放置在ntext,text或image列中的值的位置。参数标记(或ADO情况下的参数)绑定到足够大的程序变量以容纳数据块。应用程序进入一个循环,首先将下一组数据移动到绑定变量中,然后调用API函数或方法来写入该数据块。重复此操作直到整个数据值被发送完毕。
archive_id索引? – taylonr 2011-04-19 15:18:27