在MSSQL2008下反复执行pSaveCanData过程,过程有一XML文件参数,达十几K,当SQL内存达到近2G时报如下错误:
消息 6624,级别 16,状态 7,过程 sp_xml_preparedocument,第 1 行
无法创建 XML 文档,因为服务器内存不足。请使用 sp_xml_removedocument 释放 XML 文档。
消息 701,级别 17,状态 123,过程 pSaveCanData,第 14 行
资源池 'default' 没有足够的系统内存来运行此查询。
关闭执行一段时间后,又可以执行了,重启数据库也可以再次执行,恳请各位怎么解决这个问题?
pSaveCanData过程描写如下:
create PROCEDURE [dbo].[pSaveCanData] @CarMark varchar(20),@RecvTime datetime,@CanDataXML text
AS
SET NOCOUNT ON;
if (@CanDataXML is not null)
begin
declare @CanData int
EXEC Sp_xml_preparedocument @CanData OUTPUT,@CanDataXML
EXEC Sp_xml_preparedocument @CanData OUTPUT,@CanDataXML
begin tran
--事务开始
.......执行XML文档插入操作IF @@Error=0
BEGIN
COMMIT TRANSACTION  --事务提交
return 0  
END
ELSE BEGIN
ROLLBACK TRANSACTION  --事务回滚
return -1
END
EXEC Sp_xml_removedocument @CanData

解决方案 »

  1.   

    你程序里有return ,后面就不执行了,改改
    create PROCEDURE [dbo].[pSaveCanData] @CarMark varchar(20),@RecvTime datetime,@CanDataXML text
    AS
    SET NOCOUNT ON;
    if (@CanDataXML is not null)
    begin
    declare @CanData int
    EXEC Sp_xml_preparedocument @CanData OUTPUT,@CanDataXML
    EXEC Sp_xml_preparedocument @CanData OUTPUT,@CanDataXML
    begin tran
    --事务开始
    .......执行XML文档插入操作IF @@Error=0
    BEGIN
    COMMIT TRANSACTION --事务提交
    EXEC Sp_xml_removedocument @CanData
    return 0   
    END
    ELSE BEGIN
    ROLLBACK TRANSACTION --事务回滚
    EXEC Sp_xml_removedocument @CanData
    return -1
    END
      

  2.   

    都2008了,就别用这种方法来操作xml了。
      

  3.   


    to:ldslove
      我是要实现把一个数据集插入数据库(行数不定),2008还有什么执行XML文件更好的方式吗?
      

  4.   

    to:xys_777
    谢谢,正在测试。