Lunghezza massima della stringa che può essere restituita dalla procedura archiviata in SQL Server 2008 alle app .net
-
29-10-2019 - |
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:
- Qual è la lunghezza massima della stringa che posso restituire da una procedura memorizzata?
- 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.
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()
).