2013-02-12 77 views
4

我想使用Liquibase部署數據庫更改並獲取存儲過程代碼之一的下面的錯誤。Liquibase:近語法錯誤;

SET NOCOUNT ON: Incorrect syntax near 'ON'. 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:62) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:104) 
    at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1075) 
    at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:1059) 
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317) 
    ... 5 more 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'ON'. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.execute(SQLServerStatement.java:649) 
    at liquibase.executor.jvm.JdbcExecutor$1ExecuteStatementCallback.doInStatement(JdbcExecutor.java:92) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) 

SP的樣子:

CREATE PROCEDURE [dbo].[TestSP] 
    AS 
    BEGIN 

     SET NOCOUNT ON; 


     SELECT Col1, Col2 
     FROM dbo.[Table1] 

    END 
    GO 
GRANT EXECUTE ON [dbo].[testsp] TO [SomeRole] 
GO 

而變更的樣子:

<?xml version="1.0" encoding="utf-8"?> 
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> 

    <changeSet id="6a07201a-133e-4613-b4cf-15becbf53baf" author="Nadeem"> 

    <sqlFile path="./Creation Scripts/Stored Procedures/testsp.sql" /> 
    <rollback> 
     <sqlFile path="./Update Scripts/Stored Procedures/testsp.Rollback.sql" /> 
    </rollback> 
    </changeSet> 
</databaseChangeLog> 
+0

刪除;。我不認爲MSSql接受。 – shazin 2013-02-12 12:47:50

+0

我正在使用SQL Server,如果直接運行該代碼,sp代碼將成功執行 – 2013-02-12 12:50:14

回答

7

它看起來像您使用<sql><sqlFile>重構標籤。他們自動將您的查詢分爲;GO。這不是你想要的。

您可以將屬性splitStatements設置爲false,也可以改爲使用<createProcedure>重構標記。

+0

我正在使用SqlFile,並且sp的腳本位於.sql文件中。我編輯了問題以添加變更集。 – 2013-02-12 14:08:04

+0

@Nadeem我編輯了我的答案。 – 2013-02-12 14:12:27

+0

我試過。但這並不起作用 – 2013-02-12 14:18:40