Maximale Länge der Zeichenfolge, die von der gespeicherten Prozedur in SQL Server 2008 an .net-Apps zurückgegeben werden kann
-
29-10-2019 - |
Frage
Ich gebe eine statische Zeichenfolge aus einer gespeicherten Prozedur (in SQL Server 2008) wie folgt zurück:
select 'abcdefgh.........xyz'
Wenn die Länge der statischen Zeichenfolge mehr als einen bestimmten Grenzwert überschreitet (z. B. 8 KB), wird nur ein Teil der Zeichenfolge (z. B. 7 KB) an die .net-Apps zurückgegeben.
Allerdings habe ich es auf verschiedene Weise versucht, beispielsweise durch Zuweisen einer statischen Zeichenfolge varchar(max)
und beim Auswählen der Variablen wird immer noch nur eine Teilzeichenfolge zurückgegeben.
Ich sollte eine vollständige Zeichenfolge zurückgeben, die maximal 5 MB groß sein kann.Die Hauptanliegen sind also:
- Was ist die maximale Zeichenfolgenlänge, die ich von einer gespeicherten Prozedur zurückgeben kann?
- So geben Sie eine 5-MB-Zeichenfolge von einer gespeicherten Prozedur an .net-Apps zurück.
Ich bitte darum, dass mir jemand bei der Lösung dieses Problems helfen kann.Bitte finden Sie den Code unten
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;
}
}
Vielen Dank im Voraus, Geeks.
Lösung 2
Vielen Dank für die Unterstützung. Ich habe 1 Fix für dieses Problem unter gefunden http://www.sqlservercentral.com/Forums/Topic350590-145-1.aspx
Fix ist, deklarieren Sie eine Variable und sollten so initialisiert werden, dass sie eine leere Zeichenfolge enthält und mit der Hauptzeichenfolge verknüpft ist.
DECLARE @test varchar(MAX);
set @test =''
select @test = @test + '<Invoice>.....'
Wenn die Zeichenfolgenlänge <8000 ist, funktioniert dies ohne den obigen Ansatz.
Vielen Dank an alle.
Andere Tipps
Da Sie anscheinend keine OLEDB-Verbindung verwenden (die eine 8-KB-Beschränkung hat), liegt das Problem meiner Meinung nach in Ihrem Prozedurcode.
Oder vielleicht die Kompatibilität Die Version Ihrer Datenbank ist auf etwas anderes als SQL Server 2008 eingestellt (SQL Server 2000 konnte nicht mehr als 8 KB zurückgeben). GetString()
).