2016-09-18 7 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; 

このコードを使用:GO近い構文が正しくありません:私はエラーを得た

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

答えて

1

これは間違っているので、そのようなSQLスクリプトは実行しないでください。むしろstored procedureにSQLスクリプト全体をラップし、そのプロシージャをアプリケーションコードから呼び出します。

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

GOコマンドを実行しようとすると、ODBCまたはOLE DB APIに基づくアプリケーションで構文エラーが発生します。 SQL Serverユーティリティは、GOコマンドをサーバーに送信しません。

関連する問題