Передача большого количества XML в хранимую процедуру CLR - PullRequest
2 голосов
/ 19 ноября 2008

Я пишу хранимую процедуру CLR для получения данных XML в виде строки, затем использую данные для выполнения определенных команд и т. Д.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь отправить XML длиной более 4000 символов, я получаю сообщение об ошибке, так как объект XmlDocument не может загрузить XML, так как многие из закрывающих тегов отсутствуют , из-за того, что текст усекается после 4000 символов.

Я думаю, что эта проблема сводится к хранимой процедуре CLR, отображающей строковый параметр на nvarchar (4000), когда я думаю, что мне нужно что-то вроде nvarchar (max) или ntext.

К сожалению, я не могу найти отображение типа .NET на ntext, и строковый тип автоматически переходит к nvarchar (max).

Кто-нибудь знает решение моей проблемы?

Спасибо за любую помощь

Ответы [ 3 ]

2 голосов
/ 10 февраля 2009

Я думаю, вы хотите тип 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.
        }
    }
};
0 голосов
/ 06 апреля 2009

ntext исчезнет в будущих версиях SQL Server, поэтому вместо него следует использовать nvarchar (MAX).

0 голосов
/ 06 февраля 2009

Для хранимых процедур CLR: char, varchar, text, ntext, image, cursor, определяемые пользователем типы таблиц и таблица не могут быть указаны в качестве параметров.

Вы должны иметь возможность использовать тип nvarchar (max) вместо типа ntext.

...