Longitud máxima de la cadena que se puede devolver desde el proceso almacenado en SQL Server 2008 a las aplicaciones .net

StackOverflow https://stackoverflow.com/questions/9400934

Pregunta

Estoy devolviendo una cadena estática de un procedimiento almacenado (en SQL Server 2008) como se muestra a continuación:

select 'abcdefgh.........xyz'

Si la longitud de la cadena estática supera algún límite (por ejemplo, 8 kb), solo se devuelve una cadena parcial (por ejemplo, 7 kb) a las aplicaciones .net.

Aunque intenté de diferentes maneras, como asignar una cadena estática a varchar(max) y seleccionar la variable, todavía devuelve solo una cadena parcial.

Debería devolver una cadena completa que podría tener un máximo de 5 MB.Entonces, preocupaciones principales:

  1. ¿Cuál es la longitud máxima de cadena que puedo devolver de un procedimiento almacenado?
  2. Cómo devolver una cadena de 5 mb desde un procedimiento almacenado a aplicaciones .net.

Solicito que alguien me ayude a resolver este problema. busque el código a continuación

 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;
                }               
            }

Gracias de antemano, geeks.

¿Fue útil?

Solución 2

Gracias por el apoyo, encontré una solución para esto en http://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx

La solución es declarar una variable y debe iniciarse en una cadena vacía y concatenarse con la cadena principal.

  DECLARE @test varchar(MAX);
set @test =''
 select  @test = @test + '<Invoice>.....'

Si la longitud de la cadena es <8000, funcionará sin el enfoque anterior.

Gracias a todos.

Otros consejos

Dado que parece que no está utilizando una conexión OLEDB (que tiene un límite de 8k), creo que el problema está en el código de su procedimiento.

O, quizás, la versión de compatibilidad de su base de datos está configurada para algo diferente a SQL Server 2008 (SQL Server 2000 no podría devolver más de 8k usando GetString()).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top