Zum Hauptinhalt springen

Nachbesserungsarbeiten System-DB nach einspielen neuer Mandanten-DBs

Alle ungültigen IDs entfernen

UPDATE pe SET pe.PE_US_ID = NULL FROM NET_PERSON pe LEFT OUTER JOIN CP_USER us ON pe.PE_US_ID = us.US_ID WHERE pe.PE_US_ID IS NOT NULL AND us.US_ID IS NULL UPDATE sta SET sta.US_ID = NULL FROM NET_STAMMDATEN sta LEFT OUTER JOIN CP_USER us ON sta.US_ID = us.US_ID WHERE sta.US_ID IS NOT NULL AND us.US_ID IS NULL

Jeder CP-Mitarbeiter muss sich die Person zu seinem Benutzer am besten wieder selber anlegen.

Ausstattungen passen nicht mehr mit dem Ausstattungskstalog zusammen

  1. bei allen bestehenden Ausstattungen im Katalog die AU_GRUPPE mit einem eindeutigen Präfix versehen - z.B. ‘ALTDATEN - ‘
  2. Je Kunde von dem wir eine Datenbank haben mittels GenerateUpdateScript die Inhalte folgender Tabellen (in dieser Reihenfolge) bei uns einspielen
    1. NET_AUSSTATTUNG_OENORM

    2. NET_AUSSTATTUNG_OENORM_NAME

    3. NET_AUSSTATTUNG_OENORM_KRITERIUM

    4. NET_AUSSTATTUNG

      1. Nach jedem Mandanten jeweils die AU_GRUPPE mit dem Mandantenpräfix aktualisieren.
        z.B.
        UPDATE NET_AUSSTATTUNG
        SET AU_GRUPPE = 'GSW - '
        WHERE AU_GRUPPE NOT LIKE 'ALTDATEN - '
        AND AU_GRUPPE NOT LIKE 'GSW - '
        damit sieht man später an der AU_GRUPPE von welchem Kunden die Daten kommen
    5. NET_AUSSTATTUNG_INSTANDH_ART

    6. NET_AUSSTATTUNG_INSTANDH

    7. NET_AUSSTATTUNG_INSTANDH_KRITERIUM

  3. die in Punkt 1 durchgeführte Namensänderung zum Schluss wieder rückgängig machen
    UPDATE NET_AUSSTATTUNG
    SET AU_GRUPPE = REPLACE(AU_GRUPPE,'ALTDATEN - ','')
  4. Die zugeordneten Ausstattungen ebenfalls korrigieren.
UPDATE az SET az.AZ_GRUPPE = au.AU_GRUPPE FROM NET_AUSSTATTUNG_ZU az INNER JOIN net_ausstattung au ON az.AU_ID = au.AU_ID WHERE az.AZ_GRUPPE <> au.AU_GRUPPE

Indiv-Felder stimmen nicht mehr

Die Konfiguration der Indiv-Felder (NET_EIGENSCHAFT / System-DB) stimmt nicht mehr mit den vorhandenen Feldern in den Mandanten-DBs zusammen

  1. Die bestehende Konfiguration ist hinfällig und muss daher komplett raus
DELETE FROM NET_EIGENSCHAFT_GRUPPE_ZU DELETE FROM NET_EIGENSCHAFT_GRUPPE DELETE FROM NET_EIGENSCHAFT_MANDANT DELETE FROM NET_EIGENSCHAFT
  1. Kopieren der Inhalte der NET_EIGENSCHAFT von den verschiedenen Kunden. Problematik hierbei: Wir haben ein UNIQUE-Constraint auf EIG_FREMD_ID - EIG_TABELLE - EIG_FELD_NAME. Hier kann es beim Einspielen von Kundendaten zu konflikten kommen, wenn zu von uns ausgelieferten Ausstattungen (=identische EIG_FREMD_ID) das gleiche Indiv-Feld angelegt wurde (z.B. INDIV_TYP).
    Vermutlich ist es am einfachsten, die Datensätze mit Konflikt einfach nicht zu importieren.
  2. Für den Abgleich einen beliebigen Indiv-Felder-Listendialog öffnen und “Sync Felder” betätigen. Damit sollten alle Mandanten abgeglichen sein.

Tabellen / Spalten in allen Mandanten übereinstimmend

Da wir Tabellen von 3 verschiedenen Kunden kopieren, gibt es in jedem Mandanten Eigenheiten die entfernt werden sollten

SET NOCOUNT ON CREATE TABLE #tabellen( TABELLE varchar(255) COLLATE DATABASE_DEFAULT, ANZAHL integer DEFAULT 0 ) CREATE TABLE #spalten( TABELLE varchar(255) COLLATE DATABASE_DEFAULT, SPALTE varchar(255) COLLATE DATABASE_DEFAULT, ANZAHL integer DEFAULT 0 ) CREATE TABLE #DBs( DB varchar(50) ) INSERT INTO #DBs( DB ) VALUES( 'StandardKunde_GSW' ) INSERT INTO #DBs( DB ) VALUES( 'StandardKunde_NHT' ) INSERT INTO #DBs( DB ) VALUES( 'StandardKunde_WAG' ) DECLARE DB_CURSOR CURSOR FOR( SELECT DB FROM #DBs ) DECLARE @SQL nvarchar(MAX) DECLARE @DB varchar(50) OPEN DB_CURSOR FETCH NEXT FROM DB_CURSOR INTO @DB WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL = N' --Update Tabellen die vorhanden sind UPDATE tmp SET ANZAHL = ANZAHL + 1 FROM #tabellen tmp INNER JOIN ['+@DB+'].[dbo].sysobjects obj ON tmp.TABELLE = obj.name --Insert Tabellen die noch fehlen INSERT INTO #tabellen( TABELLE, ANZAHL ) SELECT obj.name as TABELLE, 1 AS ANZAHL FROM ['+@DB+'].[dbo].sysobjects obj LEFT OUTER JOIN #spalten tmp ON obj.name = tmp.TABELLE WHERE tmp.TABELLE IS NULL AND OBJECTPROPERTY (obj.id,N''IsUserTable'') = 1 AND ( obj.name LIKE ''NET[_]%'' OR obj.name LIKE ''CP[_]%'' ) --Update Spalten die vorhanden sind UPDATE tmp SET ANZAHL = ANZAHL + 1 FROM #spalten tmp INNER JOIN ['+@DB+'].[dbo].sysobjects obj ON tmp.TABELLE = obj.name INNER JOIN ['+@DB+'].[dbo].syscolumns col ON obj.id = col.id AND tmp.SPALTE = col.name --Insert Spalten die noch fehlen INSERT INTO #spalten( TABELLE, SPALTE, ANZAHL ) SELECT obj.name as TABELLE, col.name as SPALTE, 1 AS ANZAHL FROM ['+@DB+'].[dbo].sysobjects obj INNER JOIN ['+@DB+'].[dbo].syscolumns col ON obj.id = col.id LEFT OUTER JOIN #spalten tmp ON obj.name = tmp.TABELLE AND col.name = tmp.SPALTE WHERE tmp.TABELLE IS NULL AND OBJECTPROPERTY (obj.id,N''IsUserTable'') = 1 AND ( obj.name LIKE ''NET[_]%'' OR obj.name LIKE ''CP[_]%'' ) ' exec sp_executeSQL @SQL FETCH NEXT FROM DB_CURSOR INTO @DB END CLOSE DB_CURSOR DEALLOCATE DB_CURSOR DELETE FROM #tabellen WHERE ANZAHL = (SELECT COUNT(*) FROM #DBs) DELETE FROM #spalten WHERE ANZAHL = (SELECT COUNT(*) FROM #DBs) SET NOCOUNT OFF DECLARE @TABELLE varchar(255) DECLARE @SPALTE varchar(255) DECLARE DELETE_TABLE_CURSOR CURSOR FOR SELECT TABELLE FROM #tabellen OPEN DELETE_TABLE_CURSOR FETCH NEXT FROM DELETE_TABLE_CURSOR INTO @TABELLE WHILE @@FETCH_STATUS = 0 BEGIN print 'exec dbo.CP_UPDATE_DELETE_TABLE ''dbo'', '''+@TABELLE+'''' FETCH NEXT FROM DELETE_TABLE_CURSOR INTO @TABELLE END CLOSE DELETE_TABLE_CURSOR DEALLOCATE DELETE_TABLE_CURSOR DECLARE DELETE_COLUMN_CURSOR CURSOR FOR SELECT sp.TABELLE, sp.SPALTE FROM #spalten sp LEFT OUTER JOIN #tabellen tb ON sp.TABELLE = tb.TABELLE WHERE tb.TABELLE IS NULL OPEN DELETE_COLUMN_CURSOR FETCH NEXT FROM DELETE_COLUMN_CURSOR INTO @TABELLE, @SPALTE WHILE @@FETCH_STATUS = 0 BEGIN print 'exec dbo.CP_UPDATE_DELETE_FIELD ''dbo'', '''+@TABELLE+''', '''+@SPALTE+'''' FETCH NEXT FROM DELETE_COLUMN_CURSOR INTO @TABELLE, @SPALTE END CLOSE DELETE_COLUMN_CURSOR DEALLOCATE DELETE_COLUMN_CURSOR DROP TABLE #spalten DROP TABLE #tabellen DROP TABLE #DBs
  1. Entfernen aller Tabellen, die nicht in allen Mandanten vorkommen (Altlasten, Backup-Tabellen, etc.)
  2. Entfernen aller Spalten die nicht in allen Mandanten vorkommen (Temporäre KZ, etc.)

o.g. Script generiert hierfür automatisch die entsprechenden SQL-Anweisungen.

Funktionskatalog passt nicht mehr mit den Funktionszuordnungen zusammen

Analog zu Ausstattungskatalog:

  1. Je Kunde von dem wir eine Datenbank haben mittels GenerateUpdateScript die Inhalte bei uns einspielen (‘FU_NUMMER’ unter “Prüfung auf Spalte” eintragen, damit Nummern nicht doppelt angelegt werden!)