CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Schlüssel sind wichtig. Manchmal aber auch störend

In unseren mit dem DeltaMaster Modeler aufgebauten Datenbanken existieren auf allen Dimensions- und Faktentabellen Schlüssel- und Fremdschlüsselbeziehungen. Diese Tatsache ist unerlässlich, will man im Anschluss eine funktionierende OLAP Datenbankarchitektur aufbauen. Jedoch kommt es zuweilen vor, dass gerade in großen und umfangreichen nächtlichen Transformprozessen genau eine, im Idealfall sogar isoliert betrachtbare Befüllungsprozedur eine Schlüsselverletzung hervorruft.

Nun kann solch ein nächtlicher Lauf aber die komplette arbeitsfreie Zeit beanspruchen und ein kompletter Neustart des Ladevorgangs würde die auf Ihre Daten wartenden Benutzer ausbremsen. Also geschieht die Befüllung von Hand. Doch jeder, der die Modeler-Prozeduren schon einmal einzeln angestoßen und zur Befüllung herangezogen hat, der weiß, dass einem hier sehr schnell die Kelle zur Ausfahrt „Schlüsselverletzung“ gezeigt wird. Insbesondere ein Löschen vor der erneuten Befüllung, wird aufgrund der dadurch kurzfristig auftretenden, inkonsistenten Datenhaltung nicht zugelassen. Da wir jedoch wissen, was wir tun möchten und diesen Fremdschlüssel nur temporär herausnehmen wollen, wird im Folgenden ein kurzes Skript vorgestellt, welches als Prozedur und mit dem richtigen Parameter bestückt, die Fremdschlüssel entfernen und setzen kann.

Das gesamte Skript ist als Datenbankprozedur erdacht, welche mit dem gewünschten Tabellennamen als Parameter aufgerufen werden kann. Dieser Parameter ist jene Tabelle, für welche die Schlüsselbeziehungen zunächst ausgelesen und herausgenommen, danach aber wieder gesetzt werden können.

Als Beispiel dient diese Tabelle:

'T_DIM_01_01_Jahr'

Im gesamten Aufruf würde es folgendermaßen aussehen:

EXEC P_Generate_ConstraintScripts 'T_DIM_01_01_Jahr'

Als Ergebnis der Prozedur erhält man zwei Ausgabespalten, welche dann manuell ausgeführt den eigentlichen Vorgang des Schlüsselentfernens und -wiederherstellens vornehmen. Die Prozedur liefert also die fertige SQL Syntax für den eigentlichen AlterTable-Vorgang.

Ausgabespalten

Und hier ist das gute Stück:
Code