0


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 中的结果也可以正常工作,并且似乎没有返回任何奇怪的东西。只是以下结果
numero de Pasta
301
284
211
144
77
77

SQL Server 的版本是:
版本 8.00.2066 (Intel X86) May 11 2012 18:41:14 版权所有 (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

这篇关于 SO 的帖子中,我读到这可以通过使用executeUpdate()语句或更新 MS SQL 的 JDBC 驱动程序来解决。

更新驱动程序不是使用 Google Apps Script 上的 JDBC 服务的选项......当我尝试其他选项时
- var pstmt = conn.prepareStatement("exec test.dbo.sp_dasboard_10");
- 将 sp 放入 master
都给出相同的错误。
并且带有
-的测试stmt.executeUpdate()给出了在 sysservers 中添加测试的错误...

那么还有其他想法吗?

4

2 回答 2

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 Script 的脚本开始正常工作。我们希望这个解决方案对你们所有人都有效。

祝福!

PS我们发现pyodbc(Python模块)也有同样的问题,如果它也适用于你们所有人。

于 2020-07-16T18:18:39.900 回答
1

我发现如果你使用executeUpdate()而不是executeQuery(),它不会返回错误,因为它不期望结果集。

为什么会发生这种情况,这里解释了execute、executeQuery 和 executeUpdate 之间的区别

您应该仅在执行SELECT语句时使用它。

于 2015-08-19T19:40:49.210 回答