2016-06-02 5 views
0

Ich schreibe ein Migrationsscript sql Server, um über alle geschnittenen Kalender in SD-Kalender mit einigen kleinen Änderungen zu kopieren. Ich schriebSql Server-Skript läuft weiter

WHILE (SELECT COUNT(*) FROM CUT_CALENDAR) > 0 
BEGIN 
    DECLARE @ID INT 

    SELECT TOP 1 @ID = ID FROM CUT_CALENDAR 

    INSERT INTO SD_CALENDAR (NAME, CALENDAR_ROLE_ID,DESCRIPTION,USE_IN_CUTOFF,PTY_ID,LOCK_CODE,DATA_OWNER_ID,CNT_ID,NON_BUSINESS_DAYS_MONDAY,NON_BUSINESS_DAYS_TUESDAY,NON_BUSINESS_DAYS_WEDNESDAY,NON_BUSINESS_DAYS_THURSDAY,NON_BUSINESS_DAYS_FRIDAY,NON_BUSINESS_DAYS_SATURDAY,NON_BUSINESS_DAYS_SUNDAY,CCY_ID,CODE,VERSION,SEAL,LST_UPD_TS) 
    SELECT NAME, CALENDAR_TYP_ID,DESCRIPTION,'Y',PTY_ID,LOCK_CODE,DATA_OWNER_ID,CNT_ID,NON_BUSINESS_DAYS_MONDAY,NON_BUSINESS_DAYS_TUESDAY,NON_BUSINESS_DAYS_WEDNESDAY,NON_BUSINESS_DAYS_THURSDAY,NON_BUSINESS_DAYS_FRIDAY,NON_BUSINESS_DAYS_SATURDAY,NON_BUSINESS_DAYS_SUNDAY,CCY_ID,CODE,VERSION,SEAL,LST_UPD_TS 
    FROM CUT_CALENDAR 
    WHERE ID = @ID; 

    DELETE FROM CUT_CALENDAR WHERE ID = @ID 
END 
GO 

CUT_CALENDAR folgende Skript enthält + - 30 Datensätze

Aber wenn ich dieses Skript ausführen, es läuft weiter und ich erhalte ein: java.lang.OutOfMemoryError: GC Obergrenze überschritten

Ich denke, das sagt, dass ich eine Endlosschleife gelegt habe, aber ich kann nicht sehen, wie. Kann mir jemand helfen?

+3

Wie erhalten Sie Java-Fehler in SQL Server? –

+1

Warum in eine Schleife? Sie können dies mit einem Set-basierten Ansatz tun. –

+0

Ist der Autocommit eingeschaltet? –

Antwort

0

Für die „Set Based“ Ansatz, versuchen, etwas wie folgt aus:

INSERT INTO sd_calendar (Columns) 
SELECT 
    (Columns) 
FROM 
    cut_calendar 

DELETE FROM cut_calendar 

Es gibt keine Notwendigkeit, sie eins nach dem anderen, zu tun, dass SQL nur verlangsamt. Du machst eine gerade Kopie und löschst sie dann aus der Originaltabelle, also benutze eine Massenoperation, wie oben, und du kannst die Schleife reduzieren. Wenn Sie versuchen, alles zu beeinflussen, fügen Sie keine Where-Klausel hinzu.