虽然TSQL中的循环在Java中不起作用

时间:2013-11-04 08:58:05

标签: java sql sql-server tsql sql-server-2012

我尝试使用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 

1 个答案:

答案 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