Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在单个查询中插入和选择。ADODB抛出;关闭对象时不允许操作";_Sql Server_Adodb - Fatal编程技术网

Sql server 在单个查询中插入和选择。ADODB抛出;关闭对象时不允许操作";

Sql server 在单个查询中插入和选择。ADODB抛出;关闭对象时不允许操作";,sql-server,adodb,Sql Server,Adodb,我有两个查询,它们都可以在SQL Studio中正常工作: 问题1: SELECT [id],[fullname] FROM persons WHERE [id] IN (5802824683954111059,1615647673927737) 问题2: IF OBJECT_ID('tempdb..#temp_table_1') IS NOT NULL TRUNCATE TABLE #temp_table_1 ELSE CREATE TABLE #temp_table_1 ( [key] b

我有两个查询,它们都可以在SQL Studio中正常工作:

问题1:

SELECT [id],[fullname] FROM persons WHERE [id] IN (5802824683954111059,1615647673927737)
问题2:

IF OBJECT_ID('tempdb..#temp_table_1') IS NOT NULL
TRUNCATE TABLE #temp_table_1
ELSE
CREATE TABLE #temp_table_1 ( [key] bigint primary key );
INSERT INTO #temp_table_1 ([key]) VALUES (5802824683954111059),(1615647673927737);
SELECT [id],[fullname] FROM persons WHERE [id] IN (SELECT [key] FROM #temp_table_1)
但当我使用ADODB.Recordset.Open()方法执行这些查询时,只有第一个查询返回有效结果

对于第二个查询Recordset.EOF属性,抛出“对象关闭时不允许操作”错误

第二个查询有什么问题?ADODB是否支持查询中的多个语句

演示问题的示例代码:

    conn = new ActiveXObject( 'ADODB.Connection' );
    conn.Open( 'Provider=SQLOLEDB;Integrated Security=SSPI;Server=mt;Database=test;Integrated Security=SSPI' );

    rs = new ActiveXObject( 'ADODB.Recordset' );

    //sqlQuery = "SELECT [id],[fullname] FROM persons WHERE [id] IN (5802824683954111059,1615647673927737)";

    sqlQuery = "IF OBJECT_ID('tempdb..#temp_table_1') IS NOT NULL\r\n\
TRUNCATE TABLE #temp_table_1\r\n\
ELSE\r\n\
CREATE TABLE #temp_table_1 ( [key] bigint primary key );\r\n\
INSERT INTO #temp_table_1 ([key]) VALUES (5802824683954111059),(1615647673927737);\r\n\
SELECT [id],[fullname] FROM persons WHERE [id] IN (SELECT [key] FROM #temp_table_1)";

    rs.Open( sqlQuery, conn );
    while ( ! rs.EOF )
    {
        alert( rs.Fields( 'fullname' ) );
        rs.MoveNext();
    }

尝试将
SET NOCOUNT ON
添加到T-SQL批处理中,或者在处理
SELECT
查询的结果后调用该方法

指示SQL Server在_PROCTDS协议消息(行计数)中抑制
DONE_,经典的ADO有一个坏习惯,即返回没有列的封闭空记录集。未能使用
NextResult
使用这些将阻止整个T-SQL批处理运行到完成


调用
NextResult
直到该方法返回False是一种很好的做法,因为这将确保整个批运行完成,而不管
SET NOCOUNT
会话设置如何。请注意,此技术也适用于其他客户端API(ADO.NET、JDBC等),尽管使用结果的确切方法以及症状(部分结果集、未检测到的异常)有所不同。

可能是persons.id没有此类值吗?您是否可以添加ADODB脚本“SET NOCOUNT ON”(设置NOCOUNT ON)神秘地帮助您。非常感谢。