Stored procedures 将大量XML传输到CLR存储过程

Stored procedures 将大量XML传输到CLR存储过程,stored-procedures,clr,Stored Procedures,Clr,我正在编写一个CLR存储过程,以字符串的形式获取XML数据,然后使用这些数据执行某些命令等 我遇到的问题是,每当我尝试发送长度超过4000个字符的XML时,我都会遇到一个错误,因为XmlDocument对象无法加载XML,因为缺少很多结束标记,因为文本在4000个字符后被截断 我认为这个问题可以归结为将字符串参数映射到nvarchar(4000)的CLR存储过程,而我认为nvarchar(max)或ntext之类的东西正是我所需要的 不幸的是,我找不到从.NET类型到ntext的映射,字符串类型

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

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

我认为这个问题可以归结为将字符串参数映射到nvarchar(4000)的CLR存储过程,而我认为nvarchar(max)或ntext之类的东西正是我所需要的

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

有人知道我的问题的解决办法吗


感谢您对CLR存储过程、char、varchar、text、ntext、image、cursor、, 用户定义表类型,不能将表指定为参数


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

我认为您需要
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.
        }
    }
};

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