我在PowerDesigner 15.1上有一个PDM。我为它生成一个SQL Server 2008R2数据库的脚本。
所以生成的脚本看起来像这样:
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('TABLE1') and o.name = CONSTRAINT1')
alter table TABLE1
drop constraint CONSTRAINT1
go
我为每张桌子重复了这一块剧本。
在创建表和约束的定义之后。
当我想用DataSourceInitializer
(由Spring提供)和良好的JDBC驱动程序执行此脚本时,我遇到以下错误:
Failed to execute SQL script statement at line 5 of resource class path resource [create_tables_SQL_SERVER.sql]: if exists (select 1
我不知道该怎么做。
答案 0 :(得分:1)
将每个语句写在一行中,或在每个语句的末尾添加一个分隔符(默认;
):
if exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('TABLE1') and o.name = CONSTRAINT1')
alter table TABLE1 drop constraint CONSTRAINT1
为了完整性,因为代码解释得最好:
魔术是由ResourceDatabasePopulator
中的代码完成的:第171..178行
String delimiter = this.separator;
if (delimiter == null) {
delimiter = DEFAULT_STATEMENT_SEPARATOR; // ";"
if (!containsSqlScriptDelimiters(script, delimiter)) {
delimiter = "\n";
}
}
splitSqlScript(script, delimiter, statements);