Script für Kunden wäre recht interessant.
Habt ihr da nur den Kontookorrent gelöscht, oder auch die Adresse gleich mit?
		
		
	 
Alles schon gemacht. Meist nur Kontokorrente und ggf. die zugehörigen Adressen dann auf inaktiv gesetzt (nach Löschen alter Geschäftsjahre, damit die alten Kundenkonten neu vergeben werden konnten). Aber auch schon inklusive Adressen.
Die Datensätze der abweichenden Lieferanschriften, die über das Kundenkonto angelegt wurden, werden automatisch beim Löschen der Kontokorrente mitgelöscht.
Als Ansatz hier mal eine Abfrage zur Ermittlung der Kundenkonten die gelöscht werden könnten, aus der dann die DELETE-Abfrage erstellt werden kann:
	
	
	
		Code:
	
	
		SELECT        dbo.KHKKontokorrent.Kto, dbo.KHKKontokorrent.Mandant, dbo.KHKKontokorrent.Matchcode, dbo.KHKKontokorrent.Adresse
FROM            dbo.KHKKontokorrent INNER JOIN
                         dbo.KHKAdressen ON dbo.KHKKontokorrent.Adresse = dbo.KHKAdressen.Adresse AND dbo.KHKKontokorrent.Mandant = dbo.KHKAdressen.Mandant
WHERE        (dbo.KHKKontokorrent.KtoArt = 'D') AND (dbo.KHKKontokorrent.Mandant = 1) AND (dbo.KHKKontokorrent.KtoTyp = 0) AND
            (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        A0Empfaenger
                               FROM            dbo.KHKVKBelege
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (A0Empfaenger = dbo.KHKKontokorrent.Kto)))
            AND (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        Rechnungsempfaenger
                               FROM            dbo.KHKVKBelege AS KHKVKBelege_1
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (Rechnungsempfaenger = dbo.KHKKontokorrent.Kto)))
            AND (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        Kto
                               FROM            dbo.KHKWdhVertrag
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (Kto = dbo.KHKKontokorrent.Kto)))
            AND (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        Rechnungsempfaenger
                               FROM            dbo.KHKKontokorrent AS KHKKontokorrent_RE
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (Rechnungsempfaenger = dbo.KHKKontokorrent.Kto)
                               AND ISNULL(KHKKontokorrent_RE.Rechnungsempfaenger, '') <> KHKKontokorrent_RE.Kto))
            AND (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        Kto
                               FROM            dbo.KHKVWProtokollDetail
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (Kto = dbo.KHKKontokorrent.Kto)))
            AND (dbo.KHKKontokorrent.Kto NOT IN
                             (SELECT        Kto
                               FROM            dbo.KHKKontenumsatz
                               WHERE        (Mandant = dbo.KHKKontokorrent.Mandant) AND (Kto = dbo.KHKKontokorrent.Kto) AND (KtoTyp = 1)))
	 
 
Falls die zugehörigen Adressdatensätze auf inaktiv gesetzt werden sollen, könnte man dies auf Basis der Abfrage vorher machen.
Falls die zugehörigen Adressdatensätze gelöscht werden sollen, würde ich diese vor dem Löschen z.B. über ein benutzerdefiniertes Feld kennzeichnen und beim Löschen der Adressdatensätze würde ich zusätzlich abfragen, ob die Adresse noch in Adressverweisen oder in Offenen Posten (KHKOpHauptsatz) referenziert ist und in diesem Fall die Adresse nicht löschen.
Der Löschvorgang müsste zweimal durchlaufen werden, da ich in dem Skript prüfe, ob das Konto als abweichender Rechnungsempfänger hinterlegt ist. Wenn das Konto mit dem abweichenden Rechnungsempfänger im ersten Durchlauf gelöscht wird, kann der abweichende Rechnungsempfänger im zweiten Durchlauf gelöscht werden, falls es keine weiteren Referenzen gibt.