0

我尝试使用 ibatis Script Runner(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。每个语句都用“;”分隔。大多数脚本都有效,但存在一个问题,即脚本内的 while 循环没有正确执行。在下面的示例中,应该创建一个包含 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 
4

1 回答 1

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  
于 2013-11-04T09:02:00.020 回答