如何使用java程序运行ms sql脚本

时间:2016-09-18 08:16:40

标签: java sql-server

我有这样的脚本:

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附近的语法不正确。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

GO不是Transact-SQL语句,您将GO传递给SQL-Server来执行它。 https://msdn.microsoft.com/en-us/library/ms188037(v=sql.110).aspx

基于ODBC或OLE DB API的应用程序在尝试执行GO命令时会收到语法错误。 SQL Server实用程序从不向服务器发送GO命令。