2

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

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

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

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

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

谢谢你的帮助

4

3 回答 3

2

我想你想要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.
        }
    }
};
于 2009-02-10T19:15:53.493 回答
0

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

您应该能够使用 nvarchar(max) 类型而不是 ntext 类型。

于 2009-02-05T23:32:40.023 回答
0

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

于 2009-04-06T14:49:34.577 回答