SQL Server 2005 Xml参数导致超时?

时间:2009-06-16 02:25:39

标签: xml sql-server-2005 parameters

我正在尝试在存储过程中发送大约1MB的XML作为XML参数,但总是连接返回超时。

任何人都知道XML类型的大小限制是什么?


环境:

  • Microsoft SQL Server 2005 Express
  • .NET Framework 2.0
  • C#

C#代码:

using (SqlCommand commandSave = new SqlCommand("SaveScanning", this.DatabaseConnection))
{
    commandSave.CommandType = System.Data.CommandType.StoredProcedure;

    SqlParameter scanningData = new SqlParameter("ScanningData", System.Data.SqlDbType.Xml);
    scanningData.Value = new SqlXml(new XmlTextReader(**HEREISTHEXMLSTRING**, XmlNodeType.Document, null));
    commandSave.Parameters.Add(scanningData);

    commandSave.ExecuteNonQuery();
}

SQL代码:

CREATE PROCEDURE [dbo].[SaveScanning]
(
    @ScanningData XML
)
AS
BEGIN
    .
    .
    .

3 个答案:

答案 0 :(得分:1)

2 GB是XML数据类型的最大大小。我已经完成了XML参数,其中包含20MB的文本,导致插入1000行,这需要一个四分之一的Xeon盒,平均500个用户spid w /连接池,大约25%cpu,16 GB内存大约10秒。

编辑:

您使用哪种XML方法使用SQL Select有问题?

的XQuery? XPath的? 打开XML?

如果您可以提供更多的T-SQL,那将会有所帮助。

答案 1 :(得分:0)

超时意味着查询耗时太长,而不是参数太大。

当然,您的查询可能需要太长时间,因为参数太大。在SQL Server Management Studio中尝试使用相同参数的相同查询(下载Express版本)。

答案 2 :(得分:0)

最后我找到了解决方案:

OPENXML“函数”读取XML是迄今为止最好的方法。

CREATE PROCEDURE InsertXMLData
(
    @XMLDoc XML
)
AS

更快的方式:

DECLARE @handle INT

EXEC sp_xml_preparedocument @handle OUTPUT, @XMLDoc

INSERT INTO TestTable
SELECT * FROM OPENXML (@handle, '/authors', 2) WITH 
  (au_id INT,
   au_lname VARCHAR(20),
   au_fname VARCHAR(20)
  )
EXEC sp_xml_removedocument @handle

很慢的方式:

INSERT INTO TestTable
SELECT
    x.item.value('@au_id', 'INT') AS au_id,
    x.item.value('@au_lname', 'VARCHAR(20)') AS au_lname
    x.item.value('@au_fname', 'VARCHAR(20)') AS au_fname
FROM
    @XMLDoc.nodes('/authors') x(item)