我正在尝试通过java对mssql数据库执行一个String,如果sql-code正确或者我没有使用EXECUTE,它可以正常工作。 但是如果EXECUTE-string中的sql-code错误,则不会显示任何错误。
虽然两个示例在mssql管理工作室中都运行良好(两者都显示出预期的错误)
一个简单的例子是:
工作(显示错误):
declare @testvar varchar(255);
BEGIN
create table dbo.test1 (testid numeric(10,2));
ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);
END
不工作(没有显示任何错误):
declare @testvar varchar(255);
BEGIN
create table dbo.test1 (testid numeric(10,2));
SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);'
EXECUTE (@testvar);
END
任何想法如何解决?
编辑1 :(简单的java代码示例,但足以显示此行为)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class QuickSqlExecuteExample {
public static Connection getConnection(String dbcon) throws SQLException {
Connection conn = null;
conn = DriverManager.getConnection(dbcon);
conn.setAutoCommit(true);
return conn;
}
public static void main(String[] args) throws SQLException {
String dbcon="jdbc:sqlserver://[HOST]:[PORT];databaseName=[DBNAME];user=[USER];password=[PASS];";
Connection con = getConnection(dbcon);
String qryString =
"declare @testvar varchar(255);"
+"\nBEGIN"
+"\n create table dbo.test1 (testid numeric(10,2));"
+"\n ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299)"
//+"\n SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);';"
//+"\n EXECUTE (@testvar);"
+"\nEND";
Statement select = con.createStatement();
select.execute(qryString);
}
}
试过的司机: Microsoft SQL Server JDBC驱动程序2.0.1803.100 / 4.0.2206.100
答案 0 :(得分:0)
如果我正确读取此内容,则忽略返回值。代码不知道它是否成功执行。您的“工作”示例只会抛出原始错误,但在“不工作”结果中会被忽略。 尝试
DECLARE @retstat int;
EXECUTE @retstat = ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);
参考:http://technet.microsoft.com/en-us/library/ms188332.aspx(见D和E部分)