2013-11-04 119 views
0

didn't工作,我試圖通過ODBC與ibatis的腳本運行(http://ibatis.apache.org/docs/java/dev/com/ibatis/common/jdbc/ScriptRunner.htmlWhile循環TSQL在Java中

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執行的Microsoft SQL Server 2012腳本。每個陳述都與「;」分開。大部分的腳本工作,不會有問題,即腳本內循環沒有得到正確執行。在下面的例子中,應該創建一個具有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 @[email protected]+1 
END 

回答

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 
+0

更好地工作,但它也只產生715行,而不是1000, 並引發錯誤:」錯誤執行: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]損害PRIMARY KEY-restriktion' PK__looptest__621ECEB16718A719'。Keyvalue(1)使用雙精度。 – Jaran

+0

我已編輯帖子。立即試用 – Madhivanan

+0

你能截斷表並嘗試再次執行代碼嗎? – Madhivanan