Существует SQL-файл, который содержит некоторые операторы Transact SQL в нем и некоторые простые запросы таблицы следующим образом:SQL терпит неудачу, когда вызывается с помощью ANT SQL задачи
IF NOT EXISTS (SELECT * FROM [dbo].[SYSTEM_PROPERTIES] WHERE SYS_PROP = 'ABC')
BEGIN
DECLARE @SYS_PROP_ID INT;
INSERT INTO SYSTEM_PROPERTIES (...,....,...) values ('...','...','...');
SELECT -------;
INSERT INTO ------;
END
GO
IF EXISTS (SELECT * FROM [dbo].[TEMPLATE] WHERE TPL_NAME='....')
UPDATE [dbo].[TEMPLATE] SET [...] = 'Y' WHERE TPL_NAME='.....'
GO
Когда я выполнить этот сценарий непосредственно в базе данных , он отлично работает. Когда же скрипт вызывается через АНТ задачей SQL он выдает следующее сообщение об ошибке:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'INT'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
Это муравей задача:
<sql driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="---------"
userid="--" password="---" keepformat="true" print="true" >
<classpath>
<pathelement location="/lib/sqljdbc4.jar"/>
<pathelement location="/lib/ojdbc14.jar"/>
</classpath>
<transaction src="${dbscript.location}/dbscript.sql"/>
</sql>
Почему сценарий сбиваться при вызове из АНТ SQL?
Снимите 'GO' – billinkc
@billinkc, спасибо за ответ. Ошибка, которую я вижу, находится прямо в начале скрипта (строка 3) в приведенном выше скрипте. Как будет удаляться помощь GO в этом случае? – user811433
Мое предположение заключается в том, что GO, который не является частью TSQL, но вместо этого интерпретируется специально в командных инструментах (sqlcmd/ssms), вызывает загрязнение работ. Который объяснил бы, почему он работает, когда выполняется напрямую, но не здесь. Это теория, поэтому я прокомментировал вместо ответа – billinkc