2013-12-19 6 views
2

У меня есть PDM на PowerDesigner 15.1. И я создаю скрипт с ним для SQL Server 2008R2 db.SQL-скрипт, созданный PowerDesigner

Так сгенерированный сценарий выглядит как-то вроде этого:

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 (при условии, к весне), и хороший водитель JDBC, я получил эту ошибку:

Failed to execute SQL script statement at line 5 of resource class path resource [create_tables_SQL_SERVER.sql]: if exists (select 1 

Я не знаю, что делать.

ответ

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); 
Смежные вопросы