Announcement

Collapse
No announcement yet.

Function mir langem Text als Rückgabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Function mir langem Text als Rückgabe

    Hallo,
    ich möchte in einer Function Textfelder aus mehreren Datensätzen in ein langes Textfeld schreiben.
    Etwa so:
    <CODE>
    for select text01+text02+text03...
    from ca_textauskunft where id = id into :tmp_string do
    return_string = return_string + tmp_string;
    </CODE>
    Ich kenn mich nur nicht so recht mit den Datentypen von MSSql aus.
    In Firebird würde ich Blob nehmen.
    Das Problem ist, dass ich nicht weiss, ob es 1000 oder vielleicht auch 20000 Zeichen werden.
    Gibt es einen Datentyp füe dieses Problem? Und wie ist die MSSql Syntax?

    Danke, Frank

  • #2
    Hallo,

    mal ein Auszug aus der Hilfe:

    char[(n)]

    Nicht-Unicode-Zeichendaten fester Länge mit n Byte. n muss ein Wert zwischen 1 und 8.000 sein. Die Speichergröße beträgt n Byte. Das SQL-92-Synonym für char ist character.

    varchar[(n)]

    Nicht-Unicode-Zeichendaten variabler Länge mit n Byte. n muss ein Wert zwischen 1 und 8.000 sein. Die Speichergröße entspricht der tatsächlichen Länge der eingegebenen Daten in Byte, nicht n Byte. Die eingegebenen Daten können 0 Zeichen lang sein. Die SQL-92-Synonyme für varchar sind char varying oder character varying.

    ntext

    Unicode-Daten variabler Länge mit einer maximalen Länge von 230 - 1 (1.073.741.823) Zeichen. Die Speichergröße in Bytes ist doppelt so groß wie die Anzahl der eingegebenen Zeichen. Das SQL-92-Synonym für ntext ist national text.

    text

    Nicht-Unicode-Daten variabler Länge in der Codepage des Servers und mit einer maximalen Länge von 231-1 (2.147.483.647) Zeichen. Auch wenn die Servercodepage Doppelbyte-Zeichen verwendet, ist der Speicherplatz 2.147.483.647 Byte groß. Abhängig von der Zeichenfolge kann die Speichergröße unter 2.147.483.647 Byte liegen.

    image

    Binärdaten variabler Länge von 0 bis 231-1 (2.147.483.647) Byte.

    Ich hoffe, das reicht Dir, text wäre in Deinem Fall wohl angebracht.

    Viele Grüße

    Juli

    Comment


    • #3
      Hi Julia,

      vielen Dank für die ausführliche Hilfe.
      Ich denke, es hilft mir weiter.<BR>
      Fran

      Comment


      • #4
        Hinweis: man muss dabei aber berücksichtigen, dass der Datentyp TEXT einige Einschränkungen mit sich bringt. So wäre zB ein
        select textFeld + '123' from testtable
        nicht mehr möglich. Auch kann text nicht als Datentyp für lokale Variablen in stored procs verwendet werden!
        Der Datentyp Text ist also nicht einfach eine längere Variante vom Datentyp varchar.

        bye,
        Helmu

        Comment


        • #5
          Hallo,

          &gt;..dass der Datentyp TEXT einige Einschränkungen mit sich bringt.

          In der Tat, allerdings steht ab dem MS SQL Server 2005 der neue Datentyp <b>VARCHAR(MAX)</b> zur Verfügung, der eine Zeichenkette von 0 Zeichen bis 2 Milliarden Zeichen ohne Einschränkungen beim Hantieren speichern kann (unabhängig von der gespeicherten Größe können die normalen String-Operationen verwendet werden)

          Comment


          • #6
            Erst mal Danke an Alle.
            Nur, jetz bin ich wieder etwas durcheinander.
            die Tabelle hat 10 Felder (Text01 .. Text10). Die Felder haben eine Länge von 255 und bis jetzt besteht der grösste Text aus 22 Datensätzen. Das ist eine theoretische Länge von 56100.
            Ich muss schon mit:
            for select text01 + text02 + ...
            die Daten holen.
            Muss ich jetzt einen nvarchar(100000) definieren?
            Fran

            Comment


            • #7
              Wenn es einem nichts ausmacht, dass der SQLServer2005 noch nicht für den produktiven Einsatz freigegeben ist, dann kann man ja mal varchar(xxxxxx) ausprobieren (nvarchar ist der Pedant für Unicode, dadurch aber doppelter Speicherbedarf). Ansonsten bleibt in diesem Fall nur TEXT, da varchar bei 8000 (bzw. nvarchar bei 4000) aufhört.
              Am besten mal googeln mit "sqlserver" und "readtext", da kann man sich mal ein paar Beispiele zum Handling von TEXT ansehen - da stösst man plötzlich wieder auf Pointer, dürfte vor allem C-Programmierer freuen ... :-)

              Comment


              • #8
                > Ansonsten bleibt in diesem Fall nur TEXT, da varchar bei 8000 (bzw. nvarchar bei 4000) aufhört.

                Der MS-SQL-Server ist hier noch eingeschränkter.
                Alle Spalten eines Records dürfen gefüllt nur 8000 Bytes umfassen. D.h. du kannst zwar 10 Spalten mit je 8000 Zeichen (varchar) definieren, aber insgesamt dürfen die nur zu maximal 8000 Zeichen gefüllt sein

                Comment

                Working...
                X