Переместите данные SQL Server в ограниченный (1 000 строк) блоки

Потому что ...

Eclipse использует EJC (eclipse Java compiler), который проще, чем стандартный Java-компилятор, в отношении ошибки компиляции. Так что использование ejc из скрипта ant build решило эту проблему.

Поместите

org.eclipse.jdt.core_xxx.jar
jdtCompilerAdapter.jar

в каталог ant-lib в корневом каталоге проекта и выберите «Выполнить»> «Внешние инструменты»> «Конфигурация внешних инструментов»> «JRE»> «Выполнить в той же JRE, что и рабочее пространство»

«Добавить» приведенный ниже код для файла build.xml.

<typedef name="ecj" classname="org.eclipse.jdt.core.JDTCompilerAdapter">
     <classpath>
          <fileset dir="ant-lib" includes="*.jar" />
     </classpath>
</typedef>

Добавить

compiler="org.eclipse.jdt.core.JDTCompilerAdapter"

К

<target name="Compile" depends="Initialize">
        <javac 
            classpathref="classpath" 
            srcdir="${src}" 
            destdir="${bin}"

...

Выполнить build.xml ...

Buildfile: /home/masa/Public/git/jaydle-project/build.xml

Initialize:
      [delete] Deleting directory /home/masa/Public/git/jaydle-project/bin
      [delete] Deleting directory /home/masa/Public/git/jaydle-project/jar
       [mkdir] Created dir: /home/masa/Public/git/jaydle-project/bin
       [mkdir] Created dir: /home/masa/Public/git/jaydle-project/jar

Compile:
       [javac] Since compiler setting isn't classic or modern, ignoring fork setting.
       [javac] Since compiler setting isn't classic or modern, ignoring fork setting.
       [javac] Compiling 6 source files to /home/masa/Public/git/jaydle-project/bin
       [javac] Since compiler setting isn't classic or modern, ignoring fork setting.
       [javac] ----------
       [javac] 1. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 3)
       [javac]  import java.util.ArrayList;
       [javac]         ^^^^^^^^^^^^^^^^^^^
       [javac] The import java.util.ArrayList is never used
       [javac] ----------
       [javac] 2. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 5)
       [javac]  import java.util.List;
       [javac]         ^^^^^^^^^^^^^^
       [javac] The import java.util.List is never used
       [javac] ----------
       [javac] 3. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 22)
       [javac]  import static jaydle.BackgroundTask.*;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.BackgroundTask is never used
       [javac] ----------
       [javac] 4. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 25)
       [javac]  public class Id3Tagger extends JFrame
       [javac]               ^^^^^^^^^
       [javac] The serializable class Id3Tagger does not declare a static final serialVersionUID field of type long
       [javac] ----------
       [javac] 5. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 32)
       [javac]  private boolean DEBUG = true;   
       [javac]                  ^^^^^
       [javac] The value of the field Id3Tagger.DEBUG is not used
       [javac] ----------
       [javac] 6. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Id3Tagger.java (at line 49)
       [javac]  Matcher matcher=pattern.matcher(TargetText);
       [javac]          ^^^^^^^
       [javac] The value of the local variable matcher is not used
       [javac] ----------
       [javac] ----------
       [javac] 7. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 7)
       [javac]  import java.util.ArrayList;
       [javac]         ^^^^^^^^^^^^^^^^^^^
       [javac] The import java.util.ArrayList is never used
       [javac] ----------
       [javac] 8. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 8)
       [javac]  import java.util.Arrays;
       [javac]         ^^^^^^^^^^^^^^^^
       [javac] The import java.util.Arrays is never used
       [javac] ----------
       [javac] 9. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 10)
       [javac]  import java.util.regex.Matcher;
       [javac]         ^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import java.util.regex.Matcher is never used
       [javac] ----------
       [javac] 10. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 11)
       [javac]  import java.util.regex.Pattern;
       [javac]         ^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import java.util.regex.Pattern is never used
       [javac] ----------
       [javac] 11. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 14)
       [javac]  import com.mpatric.mp3agic.ID3v2;
       [javac]         ^^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import com.mpatric.mp3agic.ID3v2 is never used
       [javac] ----------
       [javac] 12. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 15)
       [javac]  import com.mpatric.mp3agic.Mp3File;
       [javac]         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import com.mpatric.mp3agic.Mp3File is never used
       [javac] ----------
       [javac] 13. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 17)
       [javac]  import jaydle.JaydlePrototype.ButtonListener;
       [javac]         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.JaydlePrototype.ButtonListener is never used
       [javac] ----------
       [javac] 14. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 21)
       [javac]  import static jaydle.BackgroundTask.*;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.BackgroundTask is never used
       [javac] ----------
       [javac] 15. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydleMusicManager.java (at line 47)
       [javac]  private boolean DEBUG = true;   
       [javac]                  ^^^^^
       [javac] The value of the field JaydleMusicManager.DEBUG is not used
       [javac] ----------
       [javac] ----------
       [javac] 16. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydlePrototype.java (at line 31)
       [javac]  public class JaydlePrototype extends JFrame 
       [javac]               ^^^^^^^^^^^^^^^
       [javac] The serializable class JaydlePrototype does not declare a static final serialVersionUID field of type long
       [javac] ----------
       [javac] 17. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/JaydlePrototype.java (at line 117)
       [javac]  public static class saveDirClass implements Serializable // Named as serObj instance  
       [javac]                      ^^^^^^^^^^^^
       [javac] The serializable class saveDirClass does not declare a static final serialVersionUID field of type long
       [javac] ----------
       [javac] ----------
       [javac] 18. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Main.java (at line 4)
       [javac]  import static jaydle.JaydlePrototype.*;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.JaydlePrototype is never used
       [javac] ----------
       [javac] 19. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Main.java (at line 5)
       [javac]  import static jaydle.BackgroundTask.*;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.BackgroundTask is never used
       [javac] ----------
       [javac] ----------
       [javac] 20. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Utilities.java (at line 2)
       [javac]  import static jaydle.Utilities.println;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.Utilities.println is never used
       [javac] ----------
       [javac] 21. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Utilities.java (at line 3)
       [javac]  import static jaydle.Utilities.regexFilterFileArray;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.Utilities.regexFilterFileArray is never used
       [javac] ----------
       [javac] 22. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Utilities.java (at line 4)
       [javac]  import static jaydle.Utilities.regexFilterList;
       [javac]                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       [javac] The import jaydle.Utilities.regexFilterList is never used
       [javac] ----------
       [javac] 23. WARNING in /home/masa/Public/git/jaydle-project/src/jaydle/Utilities.java (at line 134)
       [javac]  ObjectInputStream ois = new ObjectInputStream(fis);
       [javac]                    ^^^
       [javac] Resource leak: 'ois' is never closed
       [javac] ----------
       [javac] 23 problems (23 warnings)

Main Build:
        [echo] Ant at work!
BUILD SUCCESSFUL
Total time: 674 milliseconds

Генерация предупреждений, но сборка успешна.

Но все равно придется модифицировать стандартный java-компилятор ...

12
задан SqlRyan 14 May 2009 в 17:31
поделиться

8 ответов

Просто ВСТАВЬТЕ результат DELETE:

WHILE 1=1
BEGIN

    WITH EventsTop1000 AS (
    SELECT TOP 1000 * 
        FROM Events
      WHERE <yourconditionofchoice>)
    DELETE EventsTop1000
        OUTPUT DELETED.* 
        INTO EventsBackup;

    IF (@@ROWCOUNT = 0)
        BREAK;
END

Это элементарно и непротиворечиво.

21
ответ дан 2 December 2019 в 06:10
поделиться

используйте INSERT с предложением OUTPUT INTO для хранения идентификаторов вставленных строк, затем DELETE, присоединяясь к этой временной таблице, чтобы удалить только эти идентификаторы

DECLARE @TempTable (YourKeyValue KeyDatatype not null)

INSERT INTO EventsBackups
    (columns1,column2, column3)
    OUTPUT INSERTED.primaryKeyValue
    INTO @TempTable
    SELECT
        top 1000
        columns1,column2, column3
        FROM Events

DELETE Events
    FROM Events
        INNER JOIN @TempTable  t ON Events.PrimaryKey=t.YourKeyValue 
4
ответ дан 2 December 2019 в 06:10
поделиться

Как насчет:

INSERT INTO EventsBackups
SELECT TOP 1000 * FROM Events ORDER BY YourKeyField

DELETE Events
WHERE YourKeyField IN (SELECT TOP 1000 YourKeyField FROM Events ORDER BY YourKeyField)
0
ответ дан 2 December 2019 в 06:10
поделиться

У вас есть индекс в поле даты? Если у вас нет sql, может потребоваться перейти на блокировку таблицы, которая заблокирует всех ваших пользователей во время выполнения ваших архивных операторов.

Я думаю, вам понадобится индекс, чтобы эта операция работала нормально! Поместите индекс в поле даты и попробуйте снова!

0
ответ дан 2 December 2019 в 06:10
поделиться

Как насчет того, чтобы не делать все сразу?

INSERT INTO EventsBackups
SELECT * FROM Events WHERE date criteria

Затем, позже,

DELETE FROM Events
SELECT * FROM Events INNER JOIN EventsBackup on Events.ID = EventsBackup.ID

или аналогичный.

Ничего подобного. вы уже сказали, что вам нужна транзакция.

0
ответ дан 2 December 2019 в 06:10
поделиться

Не могли бы вы сделать копию событий, переместить туда все строки с датами > = x, отбросить события и переименовать копию событий? Или скопировать, усечь, а затем скопировать обратно? Если вы можете позволить себе небольшой простой, это, вероятно, будет самым быстрым подходом.

0
ответ дан 2 December 2019 в 06:10
поделиться

Here's what I ended up doing:

SET @CleanseFilter = @startdate
WHILE @CleanseFilter IS NOT NULL
BEGIN
    BEGIN TRANSACTION

        INSERT INTO ArchiveDatabase.dbo.MyTable
        SELECT *
          FROM dbo.MyTable
         WHERE startTime BETWEEN @startdate AND @CleanseFilter

        DELETE dbo.MyTable
         WHERE startTime BETWEEN @startdate AND @CleanseFilter

    COMMIT TRANSACTION

    SET @CleanseFilter = (SELECT MAX(starttime)
                FROM (SELECT TOP 1000
                             starttime
                    FROM dbo.MyTable
                       WHERE startTime BETWEEN @startdate AND @enddate
                    ORDER BY starttime) a)
END

I'm not pulling exactly 1000, just 1000ish, so it handles repeats in the time column appropriately (something I worried about when I considered using ROWCOUNT). Since there are often repeats in the time column, I see it regularly move 1002 or 1004 rows/iteration, so I know it's getting everything.

I'm submitting this as an answer so it can be judged up against the other solutions people have provided. Let me know if there's something obviously wrong with this method. Thanks for your help, everybody, and I'll accept whichever answer has the most votes in a few days.

0
ответ дан 2 December 2019 в 06:10
поделиться

Another option would be to add a trigger procedure to the Events table that does nothing but add the same record to the EventsBackup table.

That way the EventsBackup is always up to date, and all you do is periodically purge records from your Events table.

0
ответ дан 2 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: