2016-09-21 10 views
0

Я использую Liquibase для обновления базы данных.Liquibase - обновить собственный сценарий MS SQL

У меня есть файл журнала изменений-master.xml с:

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd"> 
      <includeAll path="/src/main/resources/DBChangeLog/DDL/"/> 
</databaseChangeLog> 

в ресурсе/SRC/главная/ресурсы/DBChangeLog/DDL/У меня есть один файл с MS SQL сценария:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =   OBJECT_ID(N'[dbo].[CONFIG]') AND type in (N'U')) 
BEGIN 
CREATE TABLE [dbo].[CONFIG](
     [ID] [bigint] NOT NULL, 
     [DESCRIPTION] [varchar](255) NOT NULL, 
     [OPERATOR] [XML] NOT NULL 
CONSTRAINT [PK_CONFIG] PRIMARY KEY CLUSTERED 
(
     [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA] 
) ON [DATA] 
END 
GO 
SET ANSI_PADDING OFF 
GO 

когда я бег Maven команды я получил сообщение об ошибке: МВН LiquiBase: обновление

оШИБКА:

src\main\resources\DBChangeLog\DDL\V2_20_0_0008__test.sql::raw::includeAll failed. Error: Incorrect syntax near 'GO'. [Failed SQL: SET ANSI_NULLS ON 

GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CONFIG]') AND type in (N'U')) 
BEGIN 
CREATE TABLE [dbo].[CONFIG](
     [ID] [bigint] NOT NULL,   
     [DESCRIPTION] [varchar](255) NOT NULL, 
     [OPERATOR] [XML] NOT NULL 
CONSTRAINT [PK_CONFIG] PRIMARY KEY CLUSTERED 
(
     [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA] 
) ON [DATA] 
END 
GO 
SET ANSI_PADDING OFF 
GO] 

Можно ли запускать типичный сценарий MS SQL или Liquibase, у которого будет проблема?

+0

'GO' не является оператором SQL, поэтому вы не можете поместить его в скрипт, который выполняется через JDBC. –

ответ

2

Посмотрите на эту страницу: http://www.liquibase.org/documentation/changes/sql.html для параметров endDelimiter и splitStatements.

+0

Проблема заключается в «SET QUOTED_IDENTIFIER ON» «SET ANSI_PADDING ON» to. Странно, что я могу запустить этот скрипт в MS Server Management Studio. – Alburnus

+0

Возможно, что команда «set» не поддерживается в JDBC, поэтому Liquibase не может ее выполнить. Я получил эту проблему с командой «set» sqlplus для базы данных Oracle. – dbf