Lunghezza massima della stringa che può essere restituita dalla procedura archiviata in SQL Server 2008 alle app .net

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

Domanda

Sto restituendo una stringa statica da una stored procedure (in SQL Server 2008) come di seguito:

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

Se la lunghezza della stringa statica supera un certo limite (ad esempio: 8kb), viene restituita solo la stringa parziale (ad esempio: 7kb) alle app .net.

Anche se ho provato in diversi modi, come l'assegnazione di una stringa statica a varchar(max) e la selezione della variabile, viene comunque restituita solo una stringa parziale.

Dovrei restituire una stringa completa che potrebbe essere di massimo 5 MB.Quindi, le principali preoccupazioni:

  1. Qual è la lunghezza massima della stringa che posso restituire da una procedura memorizzata?
  2. Come restituire una stringa di 5 MB dalla stored procedure alle app .net.

Chiedo a qualcuno di aiutarmi a risolvere questo problema. si prega di trovare il codice di seguito

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

Grazie in anticipo geek.

È stato utile?

Soluzione 2

Grazie per il supporto, ho trovato 1 soluzione per questo problema su http://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx

La soluzione è dichiarare una variabile e dovrebbe essere inizializzata in una stringa vuota e concatenata con la stringa principale.

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

Se la lunghezza della stringa è <8000, funzionerà senza l'approccio precedente.

Grazie a tutti.

Altri suggerimenti

Poiché sembra che tu non stia utilizzando una connessione OLEDB (che ha un limite di 8k), penso che il problema sia nel codice della tua procedura.

O, forse, la versione compatibilità del database è impostata su qualcosa di diverso da SQL Server 2008 (SQL Server 2000 non può restituire più di 8k utilizzando GetString()).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top