Выполняю SQL запросы через JDBC. Если запрос содержит переменную типа TABLE, то результат не возвращается:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
Пример SQL запроса:
DECLARE @Table TABLE (ID int);
INSERT INTO @Table (ID)
SELECT RecordID FROM tblData
SELECT * FROM @Table
Пример Java кода:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Full_Code {
public static void main (String[] args) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException
{
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
String Query = "", s;
BufferedReader in = new BufferedReader(new FileReader("Query.txt"));
while ((s = in.readLine())!=null) Query += s+"\n"; in.close();
in.close();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;databaseName=MyDB;user=VriL;password=987;");
stmt = (Statement) con.createStatement();
rs = stmt.executeQuery(Query);
rs.close(); con.close(); stmt.close();
}
}
Важно отметить:
Буду благодарен за любую помощь.
попробуйте SQL оформить так select @@TABLE as TABLE
для примера так работает с @VERSION
ResultSet rs_version;
String msmsql_sql="select @@VERSION as VERSION";
rs_version=stmt.executeQuery(msmsql_sql);
while (rs_version.next()){
out.println("<b>"+rs_version.getString("VERSION")+"</b>");
}
с результатом
Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) Oct 28 2016 18:17:30 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows 10 Pro 6.3 (Build 14393: )
Приведенный вами скрипт является Transact-SQL выражением, соответственно в терминах JDBC он должен интерпретироваться как CallableStatement, то есть по сути вы должны скрипт сохранить как хранимую процедуру и вызывать ее через CallableStatement
Сборка персонального компьютера от Artline: умный выбор для современных пользователей