Bei einem Java-Projekt, wo wir auch Maven einsetzen, müssen wir auf eine MSSQL-Datenbank zugreifen. Da unsere Datenbankscripte momentan im Fluss sind, d.h. sich häufig ändern, wollten wir diese mit einem maven-goal über das Plugin maven-sql-plugin neu in die Datenbank laden lassen. Leider lief das gar nicht, da die Datenbank sich weigerte dem SQL-Plugin die Befehle abzunehmen. Heute kam ich drauf, dass der Delimiter falsch gesetzt war. Dieser lautet bei MSSQL einfach “GO” und nicht “;” wie bei beispielsweise MySQL.

Leider ist dies nicht dokumentiert und so musste ich bis an die API-Docs crawlen, bis ich die endgültige Lösung für das Laden des Scripts src/main/resources/database/database.sql fand:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<plugin>
    <groupid>org.codehaus.mojo</groupid>
    <artifactid>sql-maven-plugin</artifactid>
    <version>1.3</version>
    <dependencies>
        <dependency>
            <groupid>net.sourceforge.jtds</groupid>
            <artifactid>jtds</artifactid>
            <version>1.2.2</version>
        </dependency>
    </dependencies>
    <configuration>
        <driver>net.sourceforge.jtds.jdbc.Driver</driver>
        <url>jdbc:jtds:sqlserver://localhost:1433;selectMethod=cursor;sendStringParametersAsUnicode=false</url>
        <username>YOURSECRETUSER</username>
        <password>YOURSECRETUSER</password>
    </configuration>
    <executions>
        <execution>
            <id>create-data</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <autocommit>true</autocommit>
                <delimiter>GO</delimiter>
                <srcfiles>
                    <srcfile>src/main/resources/database/database.sql</srcfile>
                </srcfiles>
            </configuration>
        </execution>
    </executions>
</plugin>