Ich führe die folgende gespeicherte Prozedur aus, um eine große Anzahl von Datensätzen zu löschen. Ich weiß, dass die DELETE-Anweisung in das Transaktionsprotokoll schreibt und das Löschen vieler Zeilen das Protokoll wachsen lässt.
Ich habe andere Optionen zum Erstellen von Tabellen und Einfügen von Datensätzen zu halten und dann Truncating die Quelle, wird diese Methode nicht für mich arbeiten sah.
Wie kann ich meine gespeicherte Prozedur unten effizienter gestalten und gleichzeitig sicherstellen, dass das Transaktionsprotokoll nicht unnötig wächst?
CREATE PROCEDURE [dbo].[ClearLog]
(
@Age int = 30
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- DELETE ERRORLOG
WHILE EXISTS ( SELECT [LogId] FROM [dbo].[Error_Log] WHERE DATEDIFF( dd, [TimeStamp], GETDATE() ) > @Age )
BEGIN
SET ROWCOUNT 10000
DELETE [dbo].[Error_Log] WHERE DATEDIFF( dd, [TimeStamp], GETDATE() ) > @Age
WAITFOR DELAY '00:00:01'
SET ROWCOUNT 0
END
END