Comprimento máximo da string que pode ser retornada do processo armazenado no SQL Server 2008 para aplicativos .net
-
29-10-2019 - |
Pergunta
Estou retornando uma string estática de um procedimento armazenado (no SQL Server 2008) conforme abaixo:
select 'abcdefgh.........xyz'
Se o comprimento da string estática exceder mais do que algum limite (por exemplo: 8kb), apenas a string parcial (por exemplo: 7kb) será retornada aos aplicativos .net.
Embora eu tenha tentado de maneiras diferentes, como atribuir uma string estática a varchar(max)
e selecionando a variável, ainda está retornando apenas uma string parcial.
Devo retornar uma string completa que pode ter no máximo 5 MB.Então, principais preocupações:
- Qual é o comprimento máximo da string que posso retornar de um procedimento armazenado
- Como retornar uma string de 5 MB do procedimento armazenado para aplicativos .net.
Solicito que alguém possa me ajudar a resolver esse problema.por favor encontre o código abaixo
using (SqlCommand command = new SqlCommand(Source.GetExportRecordSP, Connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@CandidateRecordID ", SqlDbType.NVarChar, 32)).Value = record;
try
{
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
using (SqlDataReader reader = command.ExecuteReader())
{
if(reader.Read())
{
xmlRecord = new XmlDocument();
xmlRecord.LoadXml(reader.GetString(0));
}
}
}
catch (Exception Ex)
{
Logging.WriteError(string.Format("Error while retrieving the Record \"{0}\" details from Database. Exception: {1} ", Ex.ToString()));
throw;
}
}
Agradecemos antecipadamente, geeks.
Solução 2
Obrigado pelo suporte, encontrei uma solução para isso emhttp://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx
Fix é declarar uma variável e deve ser inicializado em uma string vazia e concatenado com a string principal.
DECLARE @test varchar(MAX);
set @test =''
select @test = @test + '<Invoice>.....'
Se o comprimento da string for <8000, funcionará sem a abordagem acima.
Obrigado a todos.
Outras dicas
Como você parece não estar usando uma conexão OLEDB (que tem um limite de 8k), acho que o problema está no código do procedimento.
Ou, talvez, a versão de compatibilidade de seu banco de dados esteja definida para algo diferente do SQL Server 2008 (o SQL Server 2000 não poderia retornar mais de 8k usando GetString()
).