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