【问题标题】:Transferring large amounts of XML to a CLR stored procedure将大量 XML 传输到 CLR 存储过程
【发布时间】:2008-11-19 15:00:27
【问题描述】:

我正在编写一个 CLR 存储过程,以字符串形式获取 XML 数据,然后使用该数据执行某些命令等。

我遇到的问题是,每当我尝试发送长度超过 4000 个字符的 XML 时,我都会收到错误消息,因为 XmlDocument 对象无法加载 XML,因为缺少很多结束标记, 由于文本在 4000 个字符后被截断。

我认为这个问题归结为 CLR 存储过程将字符串参数映射到 nvarchar(4000),当我想像 nvarchar(max) 或 ntext 这样的东西是我需要的。

不幸的是,我找不到从 .NET 类型到 ntext 的映射,字符串类型自动转到 nvarchar(max)。

有人知道我的问题的解决方案吗?

感谢您的帮助

【问题讨论】:

    标签: stored-procedures clr


    【解决方案1】:

    我想你想要System.Data.SqlTypes.SqlXml 类型。 例如:

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using System.Xml;
    
    using Microsoft.SqlServer.Server;
    
    public partial class StoredProcedures
    {
        [SqlProcedure]
        public static void StoredProcedure1(SqlXml data)
        {
            using (XmlReader reader = data.CreateReader())
            {
                reader.MoveToContent();
                // Do stuff here.
            }
        }
    };
    

    【讨论】:

      【解决方案2】:

      对于 CLR 存储过程,char、varchar、text、ntext、image、cursor、 用户定义的表类型和表不能指定为参数。

      你应该可以使用 nvarchar(max) 类型而不是 ntext 类型。

      【讨论】:

        【解决方案3】:

        ntext 将在 SQL Server 的未来版本中消失,因此您应该改用 nvarchar(MAX)。

        【讨论】:

          猜你喜欢
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-24
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多