Maximale Länge der Zeichenfolge, die von der gespeicherten Prozedur in SQL Server 2008 an .net-Apps zurückgegeben werden kann

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

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:

  1. Was ist die maximale Zeichenfolgenlänge, die ich von einer gespeicherten Prozedur zurückgeben kann?
  2. 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.

War es hilfreich?

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()).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top