我在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


我不知道该怎么办。

最佳答案

将每个语句写在一行中,或者在每个语句的末尾添加定界符(默认为;):

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);

10-07 19:37
查看更多