[SQL-Server 200x] Datentypen

Hallo,
Ich bin gerade dabei von MS-Access auf SQL-Server zu portieren.

Nun gibt’s im SQL-Server ja eine Fülle von Datentypen :wink:

Daher, eine Frage zu Strings:

In Access gibt’s ja z. B. TEXT[100], was einen String mit einer maximalen Länge von 100 bedeuten würde und MEMO als unbegrenzter String.

Was sind dafür die entsprechenden Typen im SQL-Server ? Bin mir nicht sicher ob text/ntext, char/nchar/varchar etc. ?

Oder spielt das im SQL-Server keine Rolle ?

Danke & Gruss
Roger

Hallo Roger

Ich bin gerade dabei von MS-Access auf SQL-Server zu
portieren.

Grundsätzlich eine gute Idee.

mir nicht sicher ob text/ntext, char/nchar/varchar etc. ?

Wenn du den Enterprise-Manager bei dir installiert hast, dann kannst du über F1 die Onlinehilfe abrufen, ein durchaus nützliches Instrument. Unter dem Titel „Datentypen“ und den verlinkten Seiten findest du eine ausführliche Antwort auf deine Frage.

Auf die schnelle hier ein paar Tipps:

  • Wenn ein „n“ vor dem Datentyp steht handelt es sich um einen Unicode-Datentyp, d.h. du kannst dort auch arabische und chinesische Zeichen abspeichern. Wenn du eine deutsche/englische Applikation hast, brauchst du das nicht.
  • Der Datentpy „text“ ist für grosse Mengen Text. (ca. 2 Milliarden Zeichen pro Feld.)
  • Der Datentyp „char“ ist für kleine Mengen Text mit max 8000 Zeichen. Die Länge, die du bei der Definition angibst wird in jedem Fall voll ausgefüllt. Ein Feld char(30) ist immer 30 Zeichen lang, auch wenn nix drinsteht.
  • Der Datentyp „varchar“ ist ebenfalls für kleine Mengen Text mit max 8000 zeichen. speziell an diesem Datentyp ist, dass er bei kürzeren Texten weniger Speicher belegt als bei längeren Texten. Ein Feld varchar(30) mit dem Wert „Hallo“ ist also nur 5 Zeichen lang.

Für deinen Fall schlage ich folgendes vor:
MEMO --> text
TEXT(xy) --> varchar(xy)

Ich wünsch dir bei der Migration viel Erfolg! Gruss:
Christian

Also, los emou Chregu

Deine Antworten waren perfekt, sehr hilfreich :wink:

Eine kleine Frage hab ich noch: Dem Zufolge ist wohl varBinary am besten geignet für BLOB. Leider ist in der Beschreibung aber die Rede von maximal 8000 Byte als grösse.
–> Variable-length binary data of n bytes. n must be a value from 1 through 8,000

…ist ein bisschen wenig.

Oder ist es grundsätzlich keine gute Idee (Word)-Dokumente als BLOBs in die DB aufzunehmen ? (Es geht um Sitzungsprotokolle und gescannte Verträge). Hab mir schon überlegt bloss den Dateinamen als String zu speichern, aber bequem mit den BLOBs wär halt, dass ich dann gleich eine Historisierung hätte, ähnlich wie’s VSS macht.

Ich hätte in diesem Fall eine eigene Tabelle für die BLOBs mit einer eindeutigen ID erstellt…

Tja Roger,

Eine kleine Frage hab ich noch: Dem Zufolge ist wohl varBinary
am besten geignet für BLOB. Leider ist in der Beschreibung
aber die Rede von maximal 8000 Byte als grösse.
–> Variable-length binary data of n bytes. n must be a
value from 1 through 8,000

*Räusper* Mit BLOB’s hast du mich auf dem falschen Fuss erwischt, da kenn ich mich zuwenig aus. Aber gemäss Beschreibung ist „image“ ebenfalls von variabler Länge und bis zu 2 GigaByte gross. Wir verwenden immer „image“ und hatten bis jetzt noch keine Probleme damit.

Oder ist es grundsätzlich keine gute Idee (Word)-Dokumente als
BLOBs in die DB aufzunehmen ? (Es geht um Sitzungsprotokolle
und gescannte Verträge). Hab mir schon überlegt bloss den
Dateinamen als String zu speichern, aber bequem mit den BLOBs
wär halt, dass ich dann gleich eine Historisierung hätte,
ähnlich wie’s VSS macht.

Ich hatte noch nie Dateien in einer Datenbank abgespeicher; habe aber schonmal darüber nachgedacht, und würde es ähnlich machen.

Vielleicht könnte man Grundsätzliches zu diesem Thema in einem neuen Thread diskutieren? Mich würde ebenfalls interessieren, wie DB-Profis darüber denken.

Gruss: Christian