2016-09-18 2 views
-1

У меня есть сценарий, как это:как запустить MS SQL скрипт с помощью Java программы

USE master; 
GO 

--Delete the TestData database if it exists. 
IF EXISTS(SELECT * from sys.databases WHERE name='TestData') 
BEGIN 
    DROP DATABASE TestData; 
END 

--Create a new database called TestData. 
CREATE DATABASE TestData; 

Используя этот код:

BufferedReader in = new BufferedReader(new FileReader("resources/test.sql")); 
       String str; 
       StringBuffer sb = new StringBuffer(); 
       while ((str = in.readLine()) != null) { 
        sb.append(str + "\n "); 
        } 
       in.close(); 
       statement.executeUpdate(sb.toString()); 

я получил Ошибка: Неправильный синтаксис около GO.

ответ

1

Это не так, и вы не должны выполнять SQL-скрипт таким образом. Скорее оберните весь скрипт SQL в stored procedure и вызовите эту процедуру из вашего кода приложения.

CREATE PROCEDURE usp_DBAction 
AS 
BEGIN 
--Delete the TestData database if it exists. 
IF EXISTS(SELECT * from master.sys.databases WHERE name='TestData') 
BEGIN 
    DROP DATABASE TestData; 
END  
--Create a new database called TestData. 
CREATE DATABASE TestData; 
END 
+0

Я попытался, но мой скрипт sql настолько велик, что я считаю, что это не очень хороший способ вызвать хранимую процедуру. и этот скрипт запускается, когда я удаляю синтаксис GO. – code

+0

@Yuvi, вы делаете это неправильно. Это не рекомендуется вообще. Хотя вы можете ссылаться на системные представления, используя 3 имени. – Rahul

0

GO не является оператором Transact-SQL, и вы передаете GO на SQL-Server для его выполнения. https://msdn.microsoft.com/en-us/library/ms188037(v=sql.110).aspx

Приложения, основанные на API ODBC или OLE DB, получают синтаксическую ошибку, если они пытаются выполнить команду GO. Утилиты SQL Server никогда не посылают команду GO на сервер.

Смежные вопросы