【问题标题】:While loop in TSQL didn´t work in JavaTSQL 中的 While 循环在 Java 中不起作用
【发布时间】:2013-11-04 08:58:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    试试这个不使用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  
    

    【讨论】:

    • 效果更好,但它也只生成 715 行而不是 1000 行,并且会抛出错误:" Error execution: INSERT INTO looptest SELECT top 1000 row_number() over (order by (select 0)) FROM sys.columns 。原因:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Hurt the PRIMARY KEY-restriktion'PK__looptest__621ECEB16718A719'。Keyvalue (1) 使用了双倍。
    • 没什么。您首先在仅添加 715 行的地方执行它。当你执行它时,再次插入从 1 到 1000 的数字并导致 PRIMARY KEY 违规错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多