none
Umstellung Datentyp text nach varchar(max) RRS feed

  • Frage

  • Moin, Moin

    Microsoft hat den Datentyp text abgekündigt. Nun wollten wir die Felder auf varchar(max) umstellen. Dabei haben wir festgestellt, daß wenn  diese umgestellten Felder in WHERE-Bedingungen vorkommen, Datensätze nicht gefunden werden. Hauptsächlich betraf es Felder der Inhalt auch Null enthielten. Im internet haben wir dann einen Workarround gefunden in einem Update-Statement Feld=Feld zu setzen. Danach wurden Datensätze in den entsprechenden Abfragen gefunden. Diese Prozedur ist naturlich bei kleinen Datenbank ok. Aber bei 100 gigabyte Großen mit langen Laufzeiten verbunden.

    Hat jemand damit schon Erfahrung? Oder kennt eine Möglichkeit Feld=Feld mit internen Proceduren zu forcieren?


    Montag, 7. Januar 2019 10:33

Alle Antworten

  • Hi,

    ich wüsste nicht, was es da für einen Unterschied machen sollte, ob text oder varchar NULL ist.

    Beschreib das Problem doch mal genauer, dann kann man evtl. auch sagen, wo euer Fehler liegt.

    Um eine Aktualisierung durchzuführen, bei der alle NULL zustände bspw. durch '' ersetzt werden kann man bspw. folgendes machen:

    UPDATE Tabelle
    SET    Spalte = ''
    WHERE  Spalte IS NULL
    Aber ob euch das nun wirklich hilft?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Montag, 7. Januar 2019 10:47
    Moderator
  • Die Frage ist eher, was passiert bei der Umstellung von Text auf NVARCHAR!
    Wichtig ist, NVARCHAR zu nehmen, da diese wie Text unicodefähig sind. VARCHAR ist nicht Unicodefähig.
    Nun weiß ich nicht, wie der SQL-Server mit dem Alter Table umgeht.
    Werden nur bestimmte Attribute geändert, ist eine Inhaltsanpassung nicht erforderlich.
    Daher klappt das auch schön schnell.
    Da du aber beschreibst, dass eine Inhaltsanpassung erforderlich ist, liegt dies u.U. in der Umsetzung von Unicode in Nicht-Unicode begründet, bei der der SQL-Server eben glaubt, den Update Set Feld=Feld nicht machen zu müssen.

    Probier es mal mit NVARCHAR.

    • Bearbeitet bfuerchau Montag, 7. Januar 2019 13:39
    Montag, 7. Januar 2019 13:36
  • Hallo zusammen,

    Vielen dank für die Infos. Ja die Frage was passiert/oder passiert nicht bei der Umstellung von text nach varchar habe ich mir auch schon gestellt. Nach dem der Datensatz einmal geupdatet wurde ist er ereichbar. Ich vermute bald MS hat da einfach die Umstellung in den nächsten updatebefehl gelegt. Die Umstellung geht auch rasend schnell im Vergleich zur nvarchar Umstellung, die ich auch mal getestet habe. Da scheint Sqlserver tatsächlich von Satz zu Satz zugehen. Bei 200 00 Sätze braucht er rund 30 min. ICh schaue mir das mal weiter an. 

    Dienstag, 8. Januar 2019 09:17
  • Also selbst 200.000 Sätze (nehme ich mal an) sollten in wenigen Sekunden durch sein.
    Da scheinst du ein arges Problem mit dem SQL-Server zu haben.
    In ferner Vergangenheit hatte ich dieses Problem auch mal. Allerdings war die Ursache nicht aufgeräumte Transaktionslogs (20GB bei einer 300MB Datenbank).
    Da dauerte auch der Update von ca. 100.000 Sätzen ca. 10 Minuten. Nach Bereinigung der Datenbank lief es wieder in wenigen Sekunden.

    Dienstag, 8. Januar 2019 11:28