Benutzer mit den meisten Antworten
Datentyp nachträglich ändern

Frage
-
hallo,
ich habe eine Tabelle mit einen Feld wo der Datentyp smalint ist und möchte den Datentyp auf int ändern oder größer. Nur das Feld dieser SQL Tabelle am SQL 2000 Server ist schon mit Daten befüllt. Nun ist meine Frage ob es da zu Problen kommen könnte, wenn ich den Datentyp nächträglich erhöhe. Wenn ja welche?
Antworten
-
einen Integer Datentyp zu vergroessern sollte eigentlich immer verlustfrei funktionieren, sofern die Schemaaenderung zulaessig ist. z.b. kann ein Primary Key etc. nicht geaendert werden ohne, dass zuerst das Primarykey attribute entfernt wird. Technisch ist es machbar, solange Du nicht gerade milliarden von Records benutzt und dann Diskprobleme bekommst aufgrund Neuschreiben der ganzen Tabelle im Falle eines Clustered Index.
Erlaubt der SQL Server die Aenderung, so passiert dies ziemlich schnell, da eine Metadaten Aenderung ausreicht und die Werte nicht neu geschrieben werden - dh. es wird auch nicht mehr Platz beansprucht bis die Daten wirklich neu geschrieben werden.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
-
Am 04.07.2012 09:23, schrieb azwinzds1:
Das betrifft zwei Tabellen. In einer Tabelle ist das Feld Teil mit 3 anderen Werten des Primary Key's, d.h. ein Schlüsselfeld. In der anderen ist es kein Schlüsselfeld. Viele Einträge hat es auch nicht. Wie mach ich das am besten?
Kommt drauf an was es für eine Umgebung ist.
Aber ich würde den PK droppen, das Feld vergrößern und den PK neu erstellen. Das Ganze zur Sicherheit in eine Transaktion.
Eine andere Frage ist natürlich, was deine Anwendung mit dem Feld macht. Erwartet es einen SMALLINT-Wert oder kann es auch mit INT umgehen?
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
-
Hallo,
Öffne in SSMS mal die Tabelle im Designer und nimm dort die gewünschten Änderungen vor ohne zu speichern. Oben links in der Symbolleiste gibt einen Button, der Dir das Änderungsscript für die geplante Änderung erzeugt; das kannst Du als Vorlage nehmen.
Natürlich ist das Script in erster Linie auf Sicherheit ausgelegt, so dass es möglichst unter allen Umständen anschließend das richtige Ergebnis bei raus kommt; Performanz wird dabei nicht beachtet, es gibt also immer Optimierungspotential.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
Alle Antworten
-
einen Integer Datentyp zu vergroessern sollte eigentlich immer verlustfrei funktionieren, sofern die Schemaaenderung zulaessig ist. z.b. kann ein Primary Key etc. nicht geaendert werden ohne, dass zuerst das Primarykey attribute entfernt wird. Technisch ist es machbar, solange Du nicht gerade milliarden von Records benutzt und dann Diskprobleme bekommst aufgrund Neuschreiben der ganzen Tabelle im Falle eines Clustered Index.
Erlaubt der SQL Server die Aenderung, so passiert dies ziemlich schnell, da eine Metadaten Aenderung ausreicht und die Werte nicht neu geschrieben werden - dh. es wird auch nicht mehr Platz beansprucht bis die Daten wirklich neu geschrieben werden.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
-
Am 04.07.2012 09:23, schrieb azwinzds1:
Das betrifft zwei Tabellen. In einer Tabelle ist das Feld Teil mit 3 anderen Werten des Primary Key's, d.h. ein Schlüsselfeld. In der anderen ist es kein Schlüsselfeld. Viele Einträge hat es auch nicht. Wie mach ich das am besten?
Kommt drauf an was es für eine Umgebung ist.
Aber ich würde den PK droppen, das Feld vergrößern und den PK neu erstellen. Das Ganze zur Sicherheit in eine Transaktion.
Eine andere Frage ist natürlich, was deine Anwendung mit dem Feld macht. Erwartet es einen SMALLINT-Wert oder kann es auch mit INT umgehen?
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
-
Hallo,
Öffne in SSMS mal die Tabelle im Designer und nimm dort die gewünschten Änderungen vor ohne zu speichern. Oben links in der Symbolleiste gibt einen Button, der Dir das Änderungsscript für die geplante Änderung erzeugt; das kannst Du als Vorlage nehmen.
Natürlich ist das Script in erster Linie auf Sicherheit ausgelegt, so dass es möglichst unter allen Umständen anschließend das richtige Ergebnis bei raus kommt; Performanz wird dabei nicht beachtet, es gibt also immer Optimierungspotential.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. August 2012 13:01
-
Wie mach ich das innterhalb einer Transaktion? Wie ist da der COde?
nimm Dir etwas Zeit und mach Dich etwas mit SQL Server und SQL Befehlen bekannt. Diese Zeit ist eine gute Investition und wird Dir und anderen viel vermeidbaren Frust ersparen.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
-
Hallo azwinzds1,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.