Heute hatte ich wieder ein kleines Problem in einem Programm. Die Datenbank wurde voller und voller und musste mal bereinigt werden. Die Tabellen in der Datenbank sind alle sehr gleich aufgebaut, es gibt überall ein Flag an dem man erkennen kann, ob eine Zeile vom Programm als gelöscht gekennzeichnet wurde.
Nur leider löscht das Programm die Daten nie.
Erst dacht ich an ein kleines C# Tool. Connection open, Tabellen auslesen und die Delete Statements ausführen. Kurz nachgedacht,… warum nicht direkt auf dem SQL Server?
Hier die Lösung, diesen Code einfach in einer neuen SQL abfrage einfügen und ausführen. Diese Query erzeugt dann eine Ausgabe, die man sich kopieren kann und ggf. dann ausführen kann.
Identifizieren aller Tabellen und erzeugen einer passenden Ausgabe:
DECLARE @TableName nvarchar(255) DECLARE @SQL nvarchar(4000) -- Erstelle einen Temp-Table Create Table ##temp ( TableName nvarchar(255) ) -- Ermitteln aller relevanten Datenbanken Insert Into ##temp (TableName) select TABLE_NAME FROM [DatenbankName].INFORMATION_SCHEMA.Tables where TABLE_NAME like '%' -- Durch das Ergebnis loopen while exists (Select * From ##temp) begin Set NOCOUNT ON select top 1 @TableName = TableName from ##temp order by TableName asc SET @SQL = 'DELETE FROM ' + @TableName + ' WHERE DELUSER <> ''''' print @SQL delete ##temp where TableName = @TableName end drop table ##temp
Hinterlasse einen Kommentar