2016-09-21 54 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的命令,我收到错误:MVN 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 for endDelimiter和splitStatements参数。

+0

问题是“SET QUOTED_IDENTIFIER ON”“SET ANSI_PADDING ON”为。奇怪的是,我可以在MS Server Management Studio上运行这个脚本。 – Alburnus

+0

JDBC中不支持'set'命令,因此Liquibase无法执行它。我用Oracle数据库的'set'sqlplus指令解决了这个问题。 – dbf