我收到错误
我执行以下脚本时The statement did not return a result set. (line 9, file "Code")
:
var ID = '0AgsrrAUVa01-dGVZVGhWekxsX3Fjieoww0RYMFA2VVE' //profiles
function test() {
var profile ="localSQLSERVER"
var conn = getConnection(profile,ID)
var stmt = conn.createStatement();
//var query = "exec sp_help"
var query = "exec test.dbo.sp_dasboard_10"
var rs = stmt.executeQuery(query);
rs.close();
stmt.close();
conn.close();
}
知道上面相同脚本中的评论exex sp_help
确实可以正常工作。
在适当的Microsoft SQL Server 2000中的结果,也可以正常工作,似乎没有返回任何奇怪的东西。只是以下结果
数字意大利面
301
284
211
144
77
77
SQL Server的版本是:
版本8.00.2066(英特尔X86)2012年5月11日18:41:14版权所有(c)1988-2003 Microsoft Corporation在Windows NT 5.2上的标准版(Build 3790:Service Pack 2)
在this post on SO中,我读到这可以通过使用executeUpdate()
语句或更新MS SQL的JDBC驱动程序来解决。
使用Google Apps脚本上的JDBC服务不能更新驱动程序...
当我尝试其他选项时
- var pstmt = conn.prepareStatement("exec test.dbo.sp_dasboard_10");
- 把sp放在主人的身上
都给出了同样的错误。
和测试
- stmt.executeUpdate()
在sysservers中添加测试时出错...
那么还有其他想法吗?
答案 0 :(得分:2)
这么多年后,我认为您仍然没有遇到同样的问题,但我想向您展示我和我的队友找到的所有解决方案。
我们有一个这样的SP:
CREATE PROCEDURE USP_GET_SOME_CARS
@name VARCHAR (50)
AS
BEGIN
CREATE TABLE #tempTable (
carName VARCHAR (50),
carModel VARCHAR(50)
);
INSERT INTO #tempTable
SELECT Name, Model
FROM Cars
WHERE Name = @name;
SELECT *
FROM #tempTable;
DROP TABLE #tempTable;
END
当我们尝试执行与您相同的语句(executeQuery
)时,我们遇到了相同的错误:The statement did not return a result set
。
经过一段时间的搜索并进行了一些测试,我们发现原因比我们想象的要简单。似乎有些语言不能很好地解释结果集,如果您看一下上面的即兴代码,您会发现有一个INSERT,存储过程返回许多受影响的行和SELECT语句。
然后,Apps Script尝试理解响应,但似乎Apps Script无法做到这一点,因此它返回The statement did not return a result set.
。解决方案是在SP中添加语句SET NOCOUNT ON
,以避免返回受影响的行,从而使代码如下所示:
CREATE PROCEDURE USP_GET_SOME_CARS
@name VARCHAR (50)
AS
BEGIN
SET NOCOUNT ON; -- This is the added statement
CREATE TABLE #tempTable (
carName VARCHAR (50),
carModel VARCHAR(50)
);
INSERT INTO #tempTable
SELECT Name, Model
FROM Cars
WHERE Name = @name;
SELECT *
FROM #tempTable;
DROP TABLE #tempTable;
END
最后,我们的Apps脚本脚本开始正常运行。我们希望该解决方案对大家都有效。
祝福!
P.S。如果pyodbc(适用于Python的模块)也同样适用于我们,则会发现同样的问题。
答案 1 :(得分:0)
我发现如果您使用combine_latest
而不是executeUpdate()
,它不会返回错误,因为它不会指望结果集。
为什么会发生这种情况,请参阅difference between execute, executeQuery and executeUpdate
只有在执行executeQuery()
语句时才应该使用它。