我尝试使用ibatis脚本运行器(http://ibatis.apache.org/docs/java/dev/com/ibatis/common/jdbc/ScriptRunner.html)在odbc上执行Microsoft SQL Server 2012脚本
Connection "con = DriverManager.getConnection("jdbc:odbc:Database")"
ScriptRunner sr = new ScriptRunner(con, true, false);
// Give the input file to Reader
Reader reader = new BufferedReader(new FileReader(aSQLScriptFilePath));
// Execute script
sr.runScript(reader);
“aSQLScriptFilePath”是一个冗长而复杂的sqlscript。每个陈述都用“;”分隔。大多数脚本工作,有问题,虽然脚本内部的循环没有正确执行。在下面的示例中,应创建一个包含1000个的表,但它只在while循环中生成386行。其他任何内容都将正确执行(while循环除外)。我也没有在Java中得到错误。我不明白为什么while循环没有正确执行。如果我直接在Microsoft SQL Server 2012中尝试脚本,一切正常。我尝试过本机java方法statement.execute(SQLScriptconvertedInOne String)和executeBatch()都有同样的问题,它们在while循环中中止执行。
提前谢谢!
IF OBJECT_ID('test') IS NOT NULL
DROP TABLE test;
CREATE TABLE test(
spalte1 int PRIMARY KEY NOT NULL);
DECLARE @variable int = 1
WHILE (@variable<=1000)
BEGIN
INSERT INTO test
SELECT @variable
SET @variable=@variable+1
END
答案 0 :(得分:0)
尝试不使用WHILE LOOP的方法
IF OBJECT_ID('test') IS NOT NULL
DROP TABLE test;
CREATE TABLE test(
spalte1 int PRIMARY KEY NOT NULL);
INSERT INTO test
SELECT top 1000 row_number() over (order by (select 0)) FROM sys.columns as sys1
cross join sys.columns as sys2