{"id":55000484,"date":"2025-10-01T00:00:00","date_gmt":"2025-12-28T17:35:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=484"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"AccessDatenbank_zum_SQL_Server_migrieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/AccessDatenbank_zum_SQL_Server_migrieren\/","title":{"rendered":"Access-Datenbank zum SQL Server migrieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/c236c65793804408857b50de3485e0f2\" width=\"1\" height=\"1\" alt=\"\"><b>F&uuml;r die Migration der Tabellen einer Access-Datenbanken in eine SQL Server-Datenbank erledigt man am einfachsten mit einem von Microsoft bereitgestellten Tool namens SQL Server Migration Assistant. Diesem &uuml;bergeben wir den Namen der zu migrierenden Datenbank, w&auml;hlen die Tabellen und Abfragen aus, die zum SQL Server &uuml;bertragen werden sollen und starten dann die Migration.  Dies &uuml;bertr&auml;gt legt eine neue Datenbank im SQL Server an und &uuml;bertr&auml;gt die gew&auml;hlten Tabellen und Abfragen von Access zum SQL Server. Mit dem SQL Server Migration Assistant k&ouml;nnen wir au&szlig;erdem direkt Tabellenverkn&uuml;pfungen zu den neu erstellten Tabellen in der Access-Datenbank anlegen, sodass wir grunds&auml;tzlich direkt mit der Access-Anwendung weiterarbeiten k&ouml;nnen &#8211; mit dem Unterschied, dass die Daten nun nicht mehr aus den Access-Tabellen kommen, sondern vom SQL Server. In diesem Artikel zeigen wir die grundlegende Verwendung des SQL Server Migration Assistants, wobei wir erst einmal eine Datenbank verwenden, deren Tabellen und Felder sich ohne gr&ouml;&szlig;ere Probleme zum SQL Server &uuml;bertragen lassen.<\/b><\/p>\n<h2>SQL Server Migration Assistant herunterladen und installieren<\/h2>\n<p>Die jeweils aktuelle Version des SQL Server Migration Assistant finden wir, wenn wir im Internet nach genau diesen Schl&uuml;sselw&ouml;rtern suchen.<\/p>\n<p>Wir landen dann beispielsweise auf einer Seite wie der aus Bild 1. Hier klicken wir nicht etwa auf <b>SQL Server Migration Assistant for Access<\/b>, sondern scrollen weiter nach unten, wo wir unter <b>Downloads <\/b>den Eintrag <b>SSMA for Access <\/b>finden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_001.png\" alt=\"Download des SQL Server Migration Assistant\" width=\"649,627\" height=\"670,8225\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Download des SQL Server Migration Assistant<\/span><\/b><\/p>\n<p>Auf der nun erscheinenden Seite klicken wir auf <b>Download<\/b>. Die Sprache k&ouml;nnen wir nicht &auml;ndern, da der SSMA nur in Englisch verf&uuml;gbar ist.<\/p>\n<h2>Richtige Bitness ausw&auml;hlen<\/h2>\n<p>Es erscheint ein Popup, das die verschiedenen Versionen auflistet (siehe Bild 2). Hier gibt es zum Beispiel zwei verf&uuml;gbare Versionen (<b>9.5 <\/b>und <b>10.4<\/b>), die jeweils f&uuml;r 32-Bit und 64-Bit verf&uuml;gbar sind.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_002.png\" alt=\"Auswahl der richtigen Version\" width=\"649,627\" height=\"417,0273\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl der richtigen Version<\/span><\/b><\/p>\n<p>Hier sollten wir die aktuellere Version w&auml;hlen. Viel wichtiger ist jedoch, die richtige Bitness zu selektieren. Ob wir die 32-Bit-Version (erkennbar am Zusatz <b>x86<\/b>) oder die 64-Bit-Version w&auml;hlen (ohne Zusatz), h&auml;ngt nicht etwa von der Bitness des installierten Betriebssystems zusammen, sondern von der Bitness der Access-Installation.<\/p>\n<p>Zur Sicherheit pr&uuml;fen wir also, ob unsere Access-Version in der 32-Bit- oder in der 64-Bit-Version installiert ist. Das k&ouml;nnen wir beispielsweise &uuml;ber die Benutzeroberfl&auml;che von Access herausfinden. Dazu klicken wir in neueren Access-Versionen im Ribbon auf den Reiter <b>Datei<\/b> und im nun erscheinenden Bereich links auf <b>Konto<\/b>.<\/p>\n<p>Rechts sehen wir nun eine Schaltfl&auml;che namens <b>Info zu Access<\/b>. Damit &ouml;ffnen wir den Dialog aus Bild 3. Oben sehen wir nun entweder den Text <b>32 Bit <\/b>oder <b>64 Bit<\/b>. In diesem Fall haben wir es mit einem 32-Bit-Access zu tun, also installieren wir den SQL Server Migration Assistant mit dem Zusatz <b>x86<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_003.png\" alt=\"Ermitteln der Bitness der Access-Installation\" width=\"649,627\" height=\"522,7465\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ermitteln der Bitness der Access-Installation<\/span><\/b><\/p>\n<h2>Migration vorbereiten<\/h2>\n<p>F&uuml;r die erste Migration k&ouml;nnte man eine ganze Reihe von Bedingungen direkt in den Tabellen der Access-Datenbank pr&uuml;fen &#8211; ob die Beziehungen korrekt gesetzt sind, nur g&uuml;ltige Namen f&uuml;r Tabellen, Felder, Indizes und so weiter gesetzt sind und ob nur Datentypen verwendet werden, die der SQL Server auch unterst&uuml;tzt.<\/p>\n<p>Wir k&ouml;nnen aber auch einfach eine Migration starten und abwarten, welche Fehler, Warnungen und Hinweise uns der SQL Server Migration Assistant liefert. Diese k&ouml;nnen wir dann in Access korrigieren und eine erneute Migration starten.<\/p>\n<p>Wenn wir bei der Migration gleich Tabellenverkn&uuml;pfungen zur Access-Datenbank hinzuf&uuml;gen wollen, sparen wir uns eine Menge nachtr&auml;glicher Arbeit. Dies erledigt folgende Aufgaben:<\/p>\n<ul>\n<li>Die vorhandenen lokalen Tabellen werden nach einem bestimmten Schema umbenannt.<\/li>\n<li>Es werden Tabellenverkn&uuml;pfungen zu den migrierten Tabellen angelegt.<\/li>\n<\/ul>\n<p>In der Regel werden wir nach der initialen Migration allerdings Fehler, Warnungen und Hinweise auf Probleme erhalten, die wir gegebenenfalls erst in der originalen Access-Datenbank anpassen wollen, um anschlie&szlig;end in einer weiteren Migration die Tabellen mit weniger oder m&ouml;glichst sogar ohne Fehlermeldungen zum SQL Server zu &uuml;bertragen.<\/p>\n<p>Dazu ein kleiner Vorgriff: Wir k&ouml;nnten dann auf die Idee kommen, die vom SQL Server Migration Assistant zur Access-Datenbank hinzugef&uuml;gten Tabellenverkn&uuml;pfungen einfach zu l&ouml;schen und den umbenannten lokalen Tabellen einfach wieder den Originalnamen zuzuweisen.<\/p>\n<p>Wenn wir diese Datenbank dann erneut mit dem SQL Server Migration Assistant migrieren wollen, wird dieser aber &uuml;berraschenderweise keine Tabellen in der Access-Datenbank mehr finden, die sich migrieren lassen.<\/p>\n<p>Der Grund daf&uuml;r ist, dass der SSMA die Originaltabellen nicht nur umbenennt, sondern auch verschiedene Eigenschaften einstellt, mit denen der SSMA bei erneuter Migration erkennen kann, welche Tabellen bereits migriert wurden.<\/p>\n<p>Wir k&ouml;nnten nun zwar per VBA-Code nicht nur die bereits migrierten Tabellen wieder mit den Originalnamen versehen, sondern auch die vom SSMA hinzugef&uuml;gten Eigenschaften l&ouml;schen, damit diese erneut migriert werden k&ouml;nnen.<\/p>\n<p>Es ist aber wesentlich einfacher, vor der Migration eine Kopie der zu migrierenden Datenbank zu erstellen. Wenn wir dann nach der ersten Migration feststellen, dass wir noch &Auml;nderungen an den Tabellen der Access-Datenbank vornehmen wollen, damit diese im zweiten Durchlauf ohne Fehler, Warnungen und Hinweise migriert werden kann, k&ouml;nnen wir einfach die bereits migrierte Version verwerfen und mit der Kopie erneut starten.<\/p>\n<h2>Migrieren der Access-Datenbank<\/h2>\n<p>Damit starten wir die erste Migration. Die Beispieldatenbank haben wir so gestaltet, dass zumindest keine Fehler bei der Migration gemeldet werden. Welche Fehler, Warnungen und Hinweise bei der Migration auftreten k&ouml;nnen und wie wir diese beheben, werden wir uns aus Platzgr&uuml;nden ohnehin nicht in diesem Artikel ansehen.<\/p>\n<p>Wenn wir den SQL Server Migration Assistant gestartet haben, zeigt dieser standardm&auml;&szlig;ig gleich den <b>Migration Wizard<\/b> an (siehe Bild 4), der uns die verschiedenen Schritte der Migration vorstellt. Hier k&ouml;nnen wir au&szlig;erdem festlegen, ob der Wizard beim n&auml;chsten Start des SQL Server Migration Assistants erneut aufgerufen werden soll. Diese Einstellung behalten wir zun&auml;chst bei. Wir k&ouml;nnen sie aber auch deaktivieren und den Wizard bei sp&auml;teren Starts des SSMA &uuml;ber den Men&uuml;punkt <b>File|Migration Wizard<\/b> manuell aufrufen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_004.png\" alt=\"Start des SQL Server Migration Assistants\" width=\"649,627\" height=\"428,6781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Start des SQL Server Migration Assistants<\/span><\/b><\/p>\n<p>Im zweiten Schritt definieren wir die Daten des Migrationsprojekts. Hier geben wir einen Namen an und k&ouml;nnen den Pfad der zu speichernden Projektdatei festlegen (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_005.png\" alt=\"Angabe eines Projektnamens\" width=\"649,627\" height=\"428,6781\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Angabe eines Projektnamens<\/span><\/b><\/p>\n<p>Au&szlig;erdem legen wir hier fest, zu welcher SQL Server-Version wir die Access-Datenbank migrieren wollen &#8211; hier <b>SQL Server 2022<\/b>.<\/p>\n<h2>SQL Server-Version ermitteln<\/h2>\n<p>Wenn Du nicht sicher bist, welche SQL Server-Version Du verwendest, kannst Du das im SQL Server Management Studio herausfinden. Dazu klickst Du im Objekt-Explorer mit der rechten Maustaste auf das oberste Element f&uuml;r die aktuelle Verbindung und w&auml;hlst im Kontextmen&uuml; den Eintrag <b>Neue Abfrage <\/b>aus.<\/p>\n<p>Hier gibst Du den folgenden Befehl ein und f&uuml;hrst diesen mit der Taste <b>F5 <\/b>aus:<\/p>\n<pre>SELECT @@Version<\/pre>\n<p>Dies liefert das Ergebnis aus Bild 6 &#8211; in diesem Fall wird also der SQL Server in der Version 2022 verwendet, die wir auch im SSMA ausw&auml;hlen sollten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_006.png\" alt=\"Ermitteln der SQL Server-Version\" width=\"499,6267\" height=\"196,6402\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Ermitteln der SQL Server-Version<\/span><\/b><\/p>\n<p>Im SSMA klicken wir nun auf <b>Next <\/b>und landen im n&auml;chsten Schritt, in dem wir &uuml;ber die Schaltfl&auml;che <b>Add Databases <\/b>die Access-Datenbank ausw&auml;hlen, deren Tabellen wir zum SQL Server migrieren wollen. Diese erscheint anschlie&szlig;end in der Liste der hinzuzuf&uuml;genden Access-Datenbanken.<\/p>\n<p>Hier ist zu erkennen, dass wir durchaus auch die Tabellen mehrerer Access-Datenbanken gleichzeitig in eine SQL Server-Datenbank migrieren k&ouml;nnen. Das ist zum Beispiel sinnvoll, wenn wir ein Frontend nutzen, das mit den Tabellen aus mehreren Access-Backends verkn&uuml;pft ist, die alle in einer neuen SQL Server-Datenbank landen sollen. In diesem Fall wollen wir jedoch nur eine Access-Datenbank migrieren.<\/p>\n<h2>Lokale und verkn&uuml;pfte Access-Tabellen<\/h2>\n<p>An dieser Stelle kommt oft die Frage auf, wie man mit dem Fall umgeht, dass eine Frontend-Datenbank verwendet wird, die ihre Daten &uuml;ber Tabellenverkn&uuml;pfungen zu einer weiteren, als Backend verwendeten Access-Datenbank bezieht.<\/p>\n<p>Hier hat man zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Man gibt die Frontend-Datenbank als Quelle f&uuml;r die Migration an, wodurch man sowohl lokale Tabellen als auch verkn&uuml;pfte Tabellen migrieren kann.<\/li>\n<li>Oder man gibt die Backend-Datenbank als Quelle f&uuml;r die Migration an, wodurch nur die Tabellen aus der Backend-Datenbank zur Migration herangezogen werden k&ouml;nnen.<\/li>\n<\/ul>\n<p>Welche Variante man w&auml;hlt, h&auml;ngt in erster Linie davon ab, ob der SSMA bei der Migration der Access-Datenbank direkt Tabellenverkn&uuml;pfungen zu den neuen Tabellen aus der SQL Server-Datenbank anlegen soll.<\/p>\n<p>Wenn wir die Variante w&auml;hlen, bei der wir das Backend als Quelle f&uuml;r die Tabellen angeben, werden die Tabellenverkn&uuml;pfungen auch automatisch in der Backenddatenbank angelegt. Das ist weniger sinnvoll, da wir diese ja im Frontend ben&ouml;tigen.<\/p>\n<p>Wir w&uuml;rden also an dieser Stelle normalerweise die Frontenddatenbank mit dem Tabellenverkn&uuml;pfungen zur Backenddatenbank ausw&auml;hlen.<\/p>\n<p>Der SQL Server Migration Assistant erkennt dies automatisch und migriert dann die verkn&uuml;pften Tabellen aus dem Backend. Wenn wir die Option zum automatischen Erstellen von Tabellenverkn&uuml;pfungen zu den Tabellen in der zu erstellenden SQL Server-Datenbank w&auml;hlen, benennt der SSMA die Tabellenverkn&uuml;pfungen zu den Tabellen des Access-Backends um und ersetze diese durch die Verkn&uuml;pfungen zu den Tabellen der SQL Server-Datenbank.<\/p>\n<h2>Tabellen f&uuml;r die Migration ausw&auml;hlen<\/h2>\n<p>Im SQL Server Migration Assistant gehen wir nun zum n&auml;chsten Schritt, in dem wir die zu migrierenden Objekte der Access-Datenbank ausw&auml;hlen k&ouml;nnen (siehe Bild 7). Unter dem Element <b>Databases<\/b> finden wir die zuvor ausw&auml;hlte Datenbank. Erweitern wir die Knoten, sehen wir dort alle Tabellen der zu migrierenden Datenbank. Diese werden automatisch alle ausw&auml;hlt, sodass wir nur eventuell nicht zu migrierende Tabellen abzuw&auml;hlen brauchen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_008.png\" alt=\"Ausw&auml;hlen der zu migrierenden Tabellen\" width=\"649,627\" height=\"428,6781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Ausw&auml;hlen der zu migrierenden Tabellen<\/span><\/b><\/p>\n<p>Sollten hier keine Tabellen erscheinen, ist vermutlich das passiert, was wir weiter oben beschrieben haben: Du hast dann bereits eine Migration durchgef&uuml;hrt und versuchst nun, die Tabellen einer bereits migrierten Datenbank erneut im SSMA auszuw&auml;hlen. Das funktioniert wie beschrieben nicht, da einmal migrierte Tabellen mit entsprechenden Eigenschaften markiert werden, damit diese nicht erneut migriert werden k&ouml;nnen.<\/p>\n<h2>SQL Server und Zieldatenbank festlegen<\/h2>\n<p>Im vorliegenden Fall k&ouml;nnen wir jedoch alle Tabellen migrieren, daher klicken wir auf <b>Next<\/b> und landen im n&auml;chsten Dialog (siehe Bild 8). Hier w&auml;hlen wir zuerst den SQL Server aus, in dem wir die neue Datenbank anlegen wollen. Den Port brauchen wir normalerweise nicht einzustellen, wenn dieser nicht ge&auml;ndert wurde. Au&szlig;erdem geben wir hier den Namen der zu erstellenden Datenbank an, der automatisch mit dem Namen der zu migrierenden Datenbank vorbelegt wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_009.png\" alt=\"Festlegen des Ziel-SQL Servers\" width=\"649,627\" height=\"428,6781\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Festlegen des Ziel-SQL Servers<\/span><\/b><\/p>\n<p>Schlie&szlig;lich geben wir noch an, mit welcher Authentifizierungsmethode wir uns zum Migrieren der Datenbank am SQL Server anmelden wollen. Diese h&auml;ngt davon ab, wie Du Dich generell am SQL Server anmeldest. Wenn Du <b>SQL Server Authentication <\/b>ausw&auml;hlst, musst Du noch den Benutzernamen und das Kennwort f&uuml;r den Benutzer angeben, unter dem Du Zugriff auf den SQL Server hast.<\/p>\n<p>Au&szlig;erdem gibst Du noch an, ob die Verbindung verschl&uuml;sselt erfolgen soll (<b>Encrypt Connection<\/b>) und ob Du dem Server-Zertifikat vertrauen m&ouml;chtest (<b>Trust Server Certificate<\/b>). Beide k&ouml;nnen wir in der Regel aktiviert lassen, gegebenenfalls f&uuml;hrt das Weglassen einer der beiden Optionen sogar dazu, dass keine Verbindung aufgebaut werden kann. Richte Dich hier nach den Einstellungen, die Du verwendest, wenn Du Dich &uuml;ber das SQL Server Management Studio am SQL Server anmeldest.<\/p>\n<p>Klicken wir nun auf <b>Next<\/b>, erscheint die Meldung aus Bild 9. Hier best&auml;tigen wir, dass die Datenbank angelegt werden soll. Wenn wir nicht zum ersten Mal migrieren und die Datenbank bereits vorhanden ist, fragt diese Meldung, ob eine vorhandene Datenbank gleichen Namens &uuml;berschrieben werden soll.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_010.png\" alt=\"Soll die Datenbank erstellt werden?\" width=\"424,6267\" height=\"161,3582\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Soll die Datenbank erstellt werden?<\/span><\/b><\/p>\n<h2>Tabellenverkn&uuml;pfungen erstellen<\/h2>\n<p>Im n&auml;chsten Schritt folgt die Frage, ob in Access nach der Migration direkt Tabellenverkn&uuml;pfungen zu den Tabellen in der neuen SQL Server-Datenbank angelegt werden sollen. Das best&auml;tigen wir, indem wir die Option <b>Link Tables <\/b>aktivieren (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_011.png\" alt=\"Sollen Tabellenverkn&uuml;pfungen erstellt werden?\" width=\"649,627\" height=\"428,6781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Sollen Tabellenverkn&uuml;pfungen erstellt werden?<\/span><\/b><\/p>\n<h2>Durchf&uuml;hren der Migration<\/h2>\n<p>Im n&auml;chsten Schritt beginnt bereits die Migration. Der SSMA zeigt nun den Fortschritt der Migration an und wir erhalten live die Anzahl der Fehler, Warnungen und Hinweise in den verschiedenen Schritten der Migration (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_012.png\" alt=\"Der SSMA arbeitet.\" width=\"649,627\" height=\"428,6781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Der SSMA arbeitet.<\/span><\/b><\/p>\n<h2>Synchronisieren der Tabellen<\/h2>\n<p>Der SQL Server Migration Assistant kann nur Annahmen treffen, wie die Tabellen migriert werden sollen. Deshalb zeigt er im n&auml;chsten Schritt den Dialog aus Bild 12 an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_013.png\" alt=\"Das Zuordnen der Tabellen ist bei der initialen Migration nicht erforderlich.\" width=\"649,627\" height=\"416,465\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Das Zuordnen der Tabellen ist bei der initialen Migration nicht erforderlich.<\/span><\/b><\/p>\n<p>Klappen wir das Element <b>Tables<\/b> auf, sehen wir auf der rechten Seite alle Tabellen der Access-Datenbank und auf der linken Seite jeweils die Zuordnung zu einem Eintrag namens <b>[Not found]<\/b>.<\/p>\n<p>Das liegt daran, dass die Zieldatenbank noch keine Tabellen enth&auml;lt.<\/p>\n<p>Wenn wir sp&auml;ter eine weitere Migration auf die gleiche Zieldatenbank durchf&uuml;hren, erhalten wir an dieser Stelle ein Mapping der Access-Tabellen auf die gleichnamigen Tabellen im SQL Server. Diese w&uuml;rden dann beim Beibehalten der Zuordnung durch die neuen Tabellen &uuml;berschrieben werden.<\/p>\n<p>Bei der ersten Migration einer Datenbank k&ouml;nnen wir hier einfach auf <b>OK <\/b>klicken.<\/p>\n<h2>Verbindungsdaten f&uuml;r die Tabellenverkn&uuml;pfungen angeben<\/h2>\n<p>Der SSMA setzt nun die Migration fort. Wenn wir weitere oben angegeben haben, dass wir direkt Tabellenverkn&uuml;pfungen in der Access-Datenbank erstellen wollen, erscheint nun die Meldung aus Bild 13.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_014.png\" alt=\"Auswahl der Authentifizierungsmethode zum Anlegen der Tabellenverkn&uuml;pfungen\" width=\"649,627\" height=\"419,3358\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Auswahl der Authentifizierungsmethode zum Anlegen der Tabellenverkn&uuml;pfungen<\/span><\/b><\/p>\n<p>Hier geben wir an, unter welcher Anmeldung die Tabellenverkn&uuml;pfungen erstellt werden sollen. Meistens w&auml;hlt man hier <b>Windows Integrated <\/b>aus, was der Windows-Authentifizierung entspricht. Wenn die Migration im Kontext eines SQL Server-Benutzers durchgef&uuml;hrt und die Tabellenverkn&uuml;pfungen im gleichen Kontext angelegt werden sollen, k&ouml;nnen wir hier auch den Wert <b>SQL Server <\/b>beibehalten. Dann m&uuml;ssen wir aber noch den Benutzernamen und das Kennwort angeben.<\/p>\n<h2>Abschluss der Migration<\/h2>\n<p>Nachdem der SSMA auch noch die Tabellenverkn&uuml;pfungen angelegt hat, sehen wir den abschlie&szlig;enden Status der Migration wie in Bild 14.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_015.png\" alt=\"Ergebnis der Migration\" width=\"649,627\" height=\"428,6781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Ergebnis der Migration<\/span><\/b><\/p>\n<p>Hier k&ouml;nnen wir mit einem Klick auf die Links die Fehler, Warnungen und Informationen einsehen. Wie bereits erw&auml;hnt, wollen wir in diesem Artikel nicht auf die m&ouml;glichen Fehler eingehen, da dies den Rahmen sprengen w&uuml;rde. Also schlie&szlig;en wir den Bericht mit einem Klick auf <b>Close<\/b>.<\/p>\n<p>Danach sehen wir nur noch das Hauptfenster des SQL Server Migration Assistants, wo wir f&uuml;r das aktuelle Projekt noch einmal die Fehler, Warnungen und Informationen einsehen k&ouml;nnen (siehe Bild 15).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_016.png\" alt=\"&Uuml;berblick &uuml;ber Fehler, Warnungen und Informationen\" width=\"649,627\" height=\"476,2849\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: &Uuml;berblick &uuml;ber Fehler, Warnungen und Informationen<\/span><\/b><\/p>\n<p>Danach k&ouml;nnen wir den SSMA schlie&szlig;en und gegebenenfalls noch das Speichern des soeben angelegten Projekts best&auml;tigen.<\/p>\n<h2>Ergebnis in der Access-Datenbank <\/h2>\n<p>Uns interessiert an dieser Stelle viel mehr, was nun in der migrierten Access-Datenbank geschehen ist. Dazu &ouml;ffnen wir diese und sehen im Navigationsbereich nun zwei &Auml;nderungen (siehe Bild 16):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_017.png\" alt=\"Die umbenannten Tabellen und die neuen Tabellenverkn&uuml;pfungen im Navigationsbereich\" width=\"349,6267\" height=\"520,809\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Die umbenannten Tabellen und die neuen Tabellenverkn&uuml;pfungen im Navigationsbereich<\/span><\/b><\/p>\n<ul>\n<li>Die durch das entsprechende Icon als lokal markierten Tabellen wurden umbenannt. Dabei wurde vorn der Text <b>SSMA$ <\/b>und hinten <b>$local <\/b>angef&uuml;gt.<\/li>\n<li>Au&szlig;erdem finden wir hier neue, per ODBC verkn&uuml;pfte Tabellen vor.<\/li>\n<\/ul>\n<p>&Ouml;ffnen wir eine der verkn&uuml;pften Tabellen, werden die Daten genauso angezeigt, wie sie auch bei einer lokalen Tabelle erscheinen w&uuml;rden. Das Migrieren und anschlie&szlig;ende Verkn&uuml;pfen sorgt also daf&uuml;r, dass wir erst einmal wie gewohnt mit den Daten weiterarbeiten k&ouml;nnen &#8211; nur dass diese sich nun nicht mehr in der Access-Datenbank befinden, sondern in der SQL Server-Datenbank.<\/p>\n<h2>Ge&auml;nderte Eigenschaften der lokalen Tabellen<\/h2>\n<p>Wir wollen uns noch den Grund ansehen, warum wir nach dem L&ouml;schen der Tabellenverkn&uuml;pfungen und dem Umbenennen der lokalen Tabellen mit den urspr&uuml;nglichen Namen nicht einfach eine neue Migration starten k&ouml;nnen.<\/p>\n<p>Dazu verwenden wir eine VBA-Prozedur namens <b>Tabelleneigenschaften<\/b>, die alle nicht standardm&auml;&szlig;igen Eigenschaften einer Access-Tabelle ausgibt. Die Prozedur sehen wir in Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Tabelleneigenschaften(strTabelle<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>tdfDefault<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>prp<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n     <span style=\"color:blue;\">Dim <\/span>prpDefault<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n     <span style=\"color:blue;\">Dim <\/span>strValue<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>bolDefault<span style=\"color:blue;\"> As Boolean<\/span>\r\n     \r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> tdf = db.TableDefs(strTabelle)\r\n     <span style=\"color:blue;\">Set<\/span> tdfDefault = db.TableDefs(\"tblDefault\")\r\n     \r\n     For Each prp In tdf.Properties\r\n         bolDefault = <span style=\"color:blue;\">False<\/span>\r\n         For Each prpDefault In tdfDefault.Properties\r\n             <span style=\"color:blue;\">If <\/span>prpDefault.Name = prp.Name<span style=\"color:blue;\"> Then<\/span>\r\n                 bolDefault = <span style=\"color:blue;\">True<\/span>\r\n                 <span style=\"color:blue;\">Exit For<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> prpDefault\r\n         <span style=\"color:blue;\">If <\/span>bolDefault = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             strValue = \"\"\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             strValue = prp.Value\r\n             <span style=\"color:blue;\">If <\/span>Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> prp.Name, prp.Value\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> prp.Name, Err.Number, Err.Description\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> prp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Funktion zum Ausgeben nicht standardm&auml;&szlig;iger Tabelleneigenschaften<\/span><\/b><\/p>\n<p>Wie bekommen wir alle nicht standardm&auml;&szlig;igen Eigenschaften heraus? In dem wir eine frische Tabelle mit wenigen Beispielfeldern anlegen und dann untersuchen, welche Eigenschaften die zu untersuchende Tabelle im Gegensatz zu der Standardtabelle hat.<\/p>\n<p>Wir haben dazu eine neue Tabelle namens <b>tblDefault <\/b>hinzugef&uuml;gt, die nur zwei Felder enth&auml;lt und an der wir sonst keinerlei Eigenschaften angepasst haben.<\/p>\n<p>Die Prozedur <b>Tabelleneigenschaften <\/b>erwartet den Namen der zu untersuchenden Tabelle als Parameter. Sie erstellt zwei <b>TableDef<\/b>-Objekte namens <b>tdf <\/b>und <b>tdfDefault <\/b>und f&uuml;llt diese mit der zu untersuchenden Tabelle und der Tabelle <b>tblDefault<\/b>.<\/p>\n<p>Dann durchl&auml;uft sie in einer <b>For Each<\/b>-Schleife alle Eintr&auml;ge der <b>Properties <\/b>-Auflistung der Tabelle aus <b>tdf<\/b>. In einer weiteren <b>For Each<\/b>-Schleife durchl&auml;uft sie alle Properties der Tabelle aus <b>tdfDefault <\/b>und pr&uuml;ft, ob der Name der aktuellen Eigenschaft aus <b>tdf<\/b>, die wir mit <b>prp <\/b>referenziert haben, mit dem Namen der aktuellen Eigenschaft aus <b>prpDefault <\/b>&uuml;bereinstimmt.<\/p>\n<p>Ist dies der Fall, handelt es sich gem&auml;&szlig; unserer Definition um eine nicht standardm&auml;&szlig;ige Eigenschaft und wir stellen die Variable <b>bolDefault <\/b>auf <b>True <\/b>ein und verlassen die innere <b>For Each<\/b>-Schleife.<\/p>\n<p>Dann pr&uuml;fen wir per <b>If&#8230;Then<\/b>-Bedingung, ob <b>bolDefault <\/b>den Wert <b>False <\/b>enth&auml;lt und geben nur dann den Namen und den Wert der nicht standardm&auml;&szlig;igen Eigenschaft im Direktbereich aus.<\/p>\n<p>Die Prozedur rufen wir beispielsweise wie folgt auf, wenn wir die Tabellenverkn&uuml;pfung <b>tblMitarbeiter <\/b>untersuchen wollen:<\/p>\n<pre><span style=\"color:blue;\">Call<\/span> Tabelleneigenschaften(\"tblMitarbeiter\")<\/pre>\n<p>Das Ergebnis im Direktbereich sieht wie folgt aus:<\/p>\n<pre>SSMATableState              linked and backed up<\/pre>\n<p>Der SQL Server Migration Assistant hat also eine neue Eigenschaft namens <b>SSMATableState <\/b>hinzugef&uuml;gt, die den Wert <b>linked and backed up <\/b>enth&auml;lt, was bedeutet: Die Originaltabelle wurde kopiert und die neu erstellte Tabelle verkn&uuml;pft.<\/p>\n<p>F&uuml;r die nach <b>SSMA$tblMitarbeiter$local <\/b>kopierte Tabelle erhalten wir unter anderem die folgende neue Eigenschaft:<\/p>\n<pre>SSMATableState              back up copy<\/pre>\n<p>Dies deutet also darauf hin, dass es sich hier um die kopierte Tabelle handelt.<\/p>\n<p>Wenn wir also daf&uuml;r sorgen wollen, dass wir die Tabellen dieser Datenbank erneut migrieren k&ouml;nnen, m&uuml;ssen wir die Eigenschaft <b>SSMATableState <\/b>aus den entsprechenden Tabellen entfernen, die Tabellenverkn&uuml;pfungen l&ouml;schen und die gesicherten Tabellen wieder umbenennen, beispielsweise von <b>SSMA$tblMitarbeiter$local <\/b>nach <b>tblMitarbeiter<\/b>.<\/p>\n<p>Zum Gl&uuml;ck m&uuml;ssen wir das nicht von Hand erledigen, sondern der SQL Server Migration Assistant bietet eine entsprechende Funktion an.<\/p>\n<p>Dazu starten wir diesen erneut und &ouml;ffnen das zuletzt gespeicherte Migrationsprojekt. Hier klicken wir mit der rechten Maustaste im Bereich <b>Access Metadata Explorer <\/b>auf das Element f&uuml;r die Datenbank und w&auml;hlen den Befehl <b>UnlinkTables<\/b> aus (siehe Bild 17).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_484_018.png\" alt=\"R&uuml;ckg&auml;ngig machen von Verkn&uuml;pfungen und Backups\" width=\"649,627\" height=\"490,733\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: R&uuml;ckg&auml;ngig machen von Verkn&uuml;pfungen und Backups<\/span><\/b><\/p>\n<p>Die Datenbank muss geschlossen sein, damit der SSMA auf die Tabellen zugreifen kann. Danach finden wir wieder die Originaltabellen vor und k&ouml;nnen die Datenbank erneut migrieren.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Artikel beschreibt, wie man mit dem SQL Server Migration Assistant eine initiale Migration zum SQL Server durchf&uuml;hrt und als Ergebnis eine Datenbank erh&auml;lt, die bereits Tabellenverkn&uuml;pfungen auf die im SQL Server angelegten Tabellen bereitstellt.<\/p>\n<p>Weitere Schritte sind die Untersuchung der beim Migrieren auftauchenden Fehlermeldungen und deren Behebung sowie das erneute Ausf&uuml;hren der Migration, bis sich schlie&szlig;lich eine Migration ohne Fehlermeldung ausf&uuml;hren l&auml;sst.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F&uuml;r die Migration der Tabellen einer Access-Datenbanken in eine SQL Server-Datenbank erledigt man am einfachsten mit einem von Microsoft bereitgestellten Tool namens SQL Server Migration Assistant. Diesem &uuml;bergeben wir den Namen der zu migrierenden Datenbank, w&auml;hlen die Tabellen und Abfragen aus, die zum SQL Server &uuml;bertragen werden sollen und starten dann die Migration.  Dies &uuml;bertr&auml;gt legt eine neue Datenbank im SQL Server an und &uuml;bertr&auml;gt die gew&auml;hlten Tabellen und Abfragen von Access zum SQL Server. Mit dem SQL Server Migration Assistant k&ouml;nnen wir au&szlig;erdem direkt Tabellenverkn&uuml;pfungen zu den neu erstellten Tabellen in der Access-Datenbank anlegen, sodass wir grunds&auml;tzlich direkt mit der Access-Anwendung weiterarbeiten k&ouml;nnen &#8211; mit dem Unterschied, dass die Daten nun nicht mehr aus den Access-Tabellen kommen, sondern vom SQL Server. In diesem Artikel zeigen wir die grundlegende Verwendung des SQL Server Migration Assistants, wobei wir erst einmal eine Datenbank verwenden, deren Tabellen und Felder sich ohne gr&ouml;&szlig;ere Probleme zum SQL Server &uuml;bertragen lassen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662025,66052025,44000026,44000006,44000031],"tags":[],"yst_prominent_words":[],"class_list":["post-55000484","post","type-post","status-publish","format-standard","hentry","category-662025","category-66052025","category-Outlook_programmieren","category-SQL_Server_und_Co","category-twinBASICProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000484"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000484\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000484"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}