Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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 SQL Server是否有类似“的参数”;数组大小“;在甲骨文?_Sql Server_Oracle - Fatal编程技术网

Sql server SQL Server是否有类似“的参数”;数组大小“;在甲骨文?

Sql server SQL Server是否有类似“的参数”;数组大小“;在甲骨文?,sql-server,oracle,Sql Server,Oracle,如标题所述。我想知道SQL Server是否可以像oracle一样部分执行SQL表示服务器等待客户端处理最后一个网络数据包中的数据,然后填充下一个数据包我注意到,当您在SQLServer Management studio中执行select语句时,您可以在语句仍在运行时立即获取第一行。但我无法在ADO组件中获取此信息。我所能想到的就是使用服务器端游标和非键集类型游标。但是ADO使用sp_cursoropen和sp_cursorfetch来执行此操作。不使用像sql*加do这样的缓存大小。这是客户

如标题所述。我想知道SQL Server是否可以像oracle一样部分执行SQL
表示服务器等待客户端处理最后一个网络数据包中的数据,然后填充下一个数据包
我注意到,当您在SQLServer Management studio中执行select语句时,您可以在语句仍在运行时立即获取第一行。但我无法在ADO组件中获取此信息。我所能想到的就是使用服务器端游标和非键集类型游标。但是ADO使用sp_cursoropen和sp_cursorfetch来执行此操作。不使用像sql*加do这样的缓存大小。这是客户端行为,不像SSMS中的现象。我想知道原因。

你指的是
设置数组化
,一个

如果是这样的话,可能需要类似的设置。不过,我在这里可能遗漏了一些微妙之处,因为我不是每天都使用Oracle

如果我猜错了,那么您能否详细介绍一下“数组大小”的作用,因为在搜索Oracle数组大小时,我找不到任何似乎相关的点击



实际上,重新阅读我在SQL*Plus中找到的有关
set arraysize
的内容,它似乎与
ROWCOUNT
有很大不同。但是描述(似乎控制每次往返返回的行数,但不限制行的总数)似乎与您的描述“部分执行类似于oracle的SQL”不匹配。我脑子里想不出任何东西可以控制返回给客户端的结果的批处理。

看来SQL Server中的相应功能称为数组获取大小。(例如,已讨论过。)

我不认为
行数
是一个很好的例子,因为它似乎会在获取给定数量的行后完全停止查询。Oracle数组大小表示在将结果返回给客户端之前一次提取的行数,但它不会导致在提取数组已满时停止查询。arraysize的一般目的是通过控制一次从服务器发送到客户端的数据量来提高网络效率。@Dave-我只是根据得出的相同结论更新了我的答案:-仅供参考,我认为OP“部分执行”的意思是,如果查询执行计划的类型可以生成一些结果行,而不必完全执行,那么Oracle将完成足够的工作来填充一次fetch数组并将其发送给客户端。它将不会继续进一步执行查询,直到客户机处理它已发送的所有行并向数据库发送另一个fetch。客户端可以选择在获取所有记录之前终止查询的执行。我能找到的最接近的功能控制网络数据包的大小,但显然这与每个数据包中返回的行数不是一个精确的比率。我几天前读了你提到的文章,我认为它与“数组大小”不一样在sql*plus中。作为一个参考,它同样表示数组获取大小只影响网络数据包,而sqlserver在等待客户端处理最后一个数据包时不会停止执行。我说的对吗?@chenwq:读了你链接的参考资料,我不知道你说的对不对。我认为它并没有说明服务器是否会在fetch数组被填充后继续处理。这就是我要说的。我没有任何证据证明sqlserver确实做了什么。就像我编辑后的问题一样,如果我不使用服务器端游标,数组获取大小,aka。缓存大小不会使ADO数据集立即返回第一行。而sp_cursoropen/sp_cursorfetch不是我想要的。如何“部分执行SQL”?正如Dave Costa所说:“Oracle将做足够的工作来填充一次提取数组并将其发送到客户端。它将不会继续进一步执行查询,直到客户机处理它已发送的所有行,并向数据库发送另一个fetch“^_^