而TSQL中的循环在Java中不起作用

而TSQL中的循环在Java中不起作用,java,sql,sql-server,tsql,sql-server-2012,Java,Sql,Sql Server,Tsql,Sql Server 2012,我尝试使用ibatis脚本运行程序通过odbc执行Microsoft SQL Server 2012脚本 aSQLScriptFilePath是一个长而复杂的sqlscript。每个语句都用;分隔;。大多数脚本都可以工作,但问题是,虽然脚本中的循环没有正确执行。在下面的示例中,应该创建一个包含1000行的表,但它在while循环中只生成386行。除while循环外,其他所有内容都将正确执行。而且我没有在Java中得到错误。我不明白为什么while循环没有正确执行。如果我直接在Microsoft

我尝试使用ibatis脚本运行程序通过odbc执行Microsoft SQL Server 2012脚本

aSQLScriptFilePath是一个长而复杂的sqlscript。每个语句都用;分隔;。大多数脚本都可以工作,但问题是,虽然脚本中的循环没有正确执行。在下面的示例中,应该创建一个包含1000行的表,但它在while循环中只生成386行。除while循环外,其他所有内容都将正确执行。而且我没有在Java中得到错误。我不明白为什么while循环没有正确执行。如果我直接在Microsoft SQL Server 2012中尝试该脚本,一切正常。我尝试了本机java方法语句。ExecuteSQLScriptConvertedOne 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 

尝试此不使用WHILE循环的方法

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  

工作得更好,但它也只生成715行,而不是1000行,并抛出错误:执行错误:插入到looptest中,通过从sys.columns中选择0,按顺序选择前1000行。原因:java.sql.SQLException:[Microsoft][ODBC sql Server驱动程序][sql Server]损坏了主键重构“PK_uuulooptest_uuuu621Eceb16718a719”。Keyvalue 1使用双精度。无。您首先执行它,它只添加了715行。执行时,再次插入1到1000之间的数字,并导致主键冲突错误
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