读取大型nText列在SQL中超时

时间:2011-04-19 15:12:50

标签: sql-server

我们在我们的一个表中有nText字段,用于存储XML文件。我们能够在nText字段中保存大约40-50 MB的大型XML。但是当我们尝试阅读时 从存档中选择archive_xml,其中archive_id = 123,它超时。

任何替代或任何建议?

谢谢, Ĵ

3 个答案:

答案 0 :(得分:0)

当你说它超时时,它是在服务器上还是在你的代码中超时?这可能会影响不同的解决方案。

如果是服务器问题,请确保该表在您要查询的字段上有有意义的索引(例如archive_id)

如果在代码中超时,“简单”的解决方案是延长连接的超时时间。我会首先尝试其他事情,例如提高服务器性能,因为连接超时通常会隐藏更大的问题。

答案 1 :(得分:0)

如果您通过某种语言(例如C#)执行此查询,请确保在执行此操作之前关闭不需要的记录集。

通过选择工具/选项然后选择“连接”选项卡,可以增加查询分析器的查询超时。然后增加“查询超时”参数的值。

此外,索引此字段将大大减少执行查询的时间。

答案 2 :(得分:0)

根据MSDN 如果ntext,text和image数据值不超过Unicode,则为4,000个字符;字符,8,000个字符;或者二进制字符串,8,000个字节,可以在SELECT,UPDATE和INSERT语句中引用该值,与较小的数据类型的方式大致相同。例如,可以在引用nvarchar列的方式中在SELECT语句选择列表中引用具有short值的ntext列。必须遵守的一些限制,例如无法直接引用WHERE子句中的ntext,text或image列。这些列可以作为返回另一种数据类型的函数的参数包含在WHERE子句中,例如ISNULL,SUBSTRING或PATINDEX,或者在IS NULL,IS NOT NULL或LIKE表达式中。

处理更大的数据值 但是,当ntext,text和image数据值变大时,必须逐块处理它们。 Transact-SQL和数据库API都包含允许应用程序逐块处理ntext,text和image数据的函数。

数据库API遵循处理long ntext,text和image列的方式遵循一种通用模式:

要读取长列,应用程序只需在选择列表中包含ntext,text或image列,然后将列绑定到足够大的程序变量以保存合理的数据块。然后,应用程序执行该语句,并使用API​​函数或方法一次一个块地将数据检索到绑定变量中。

要编写长列,应用程序将执行带有参数标记(?)的INSERT或UPDATE语句,该值将放置在ntext,text或image列中。参数标记(或ADO情况下的参数)绑定到足以容纳数据块的程序变量。应用程序进入循环,首先将下一组数据移动到绑定变量中,然后调用API函数或方法来写入该数据块。重复此过程,直到发送完整个数据值。