首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sybase ASE按电平等效连接

Sybase ASE按电平等效连接
EN

Stack Overflow用户
提问于 2017-05-17 15:06:31
回答 2查看 1.3K关注 0票数 5

我想生成从0到9000000的数字。在Oracle中,我可以使用以下代码。我如何在Sybase ASE中做到这一点?

这是Oracle中的:

代码语言:javascript
运行
复制
SELECT level  Num
FROM DUAL
CONNECT BY LEVEL  <= 9000000
ORDER BY Num;

如何在Sybase ASE中做到这一点?

我不能创建一个表并添加一个标识,因为我需要从1到9000000的数字,所以一个表将是复杂的。是否有查询来执行此操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-29 15:50:03

在Sybase中,有一个可以用来生成数字的系统过程:行发生器

你本可以这样做:

代码语言:javascript
运行
复制
 SELECT row_num FROM sa_rowgenerator( 1, 9000000);

我根本不知道Sybase ASE,所以我搜索了它,发现这个过程在ASE中是不可用的,但是有一个替代方案:

ASE不支持system系统过程sa_rowgenerator、sa_split_list和sa_conn_info。ASE主数据库包含一个表spt_values,该表可用于以类似于sa_rowgenerator过程或system的dbo.row_generator系统表的方式选择整数值。

来源:将SQL数据库应用程序迁移到ASE

这个包含整数的表spt_values是难以置信的没有文档化。就像一张鬼桌。

我建议你试一试:

代码语言:javascript
运行
复制
select number 
FROM master.dbo.spt_values
WHERE number BETWEEN 0 AND 9000000

但如果你的数据库系统爆炸,我不负责;-)

票数 4
EN

Stack Overflow用户

发布于 2017-05-26 22:19:52

你能否提供一些细节,说明你计划如何使用这900万(+1)个数字?

如果唯一的目的是将一个数字流发送回客户端,那么在我看来,让客户机应用程序生成900万个号码就更有效了。

有许多方法可以根据少数几个较小的表的笛卡儿积(参见RMH的基-10示例)使用单个查询生成数字序列,但所有这些解决方案都需要:

  • 首先,整个笛卡儿产品将建在tempdb中。
  • 然后,对整个笛卡尔积进行排序(在内存和tempdb中)
  • 只有到那时,所需的号码才会被发送回客户端。

无论您想要生成一个小的数字集(1到10)还是一组大的数字(1到9,000,000),都需要对相同的“生成器”查询进行这种开销。

显然,需要使用一种更好、更高效、更轻量级的方法来防止占用数据服务器资源(例如,imaagine几个用户/应用程序试图生成9,000,000个数字.都使用了大量的tempdb空间以及cpu资源..。盖德..。期待来自DBA的愤怒的电子邮件/电话!)

另一个想法是使用循环构造来生成所需的数字.

代码语言:javascript
运行
复制
declare @counter bigint, @max bigint
select @counter=0, @max=9000000
while @counter <= @max
begin
    select @counter
    select @counter=@counter+1
end

..。虽然这将消除tempdb开销,但您仍然需要消耗少量的cpu资源,循环900万次。额外的性能影响可能来自生成900万1行结果集的开销,特别是您可能会看到过多的网络数据包在数据服务器和客户端应用程序之间流动。

虽然我们可以通过使最终结果看起来像单个结果集来减少网络数据包的数量,但这需要将上面的循环构造转换为存储过程,确保您已经定义了一个回送服务器,然后创建一个要引用的代理表,proc说;然后您将查询代理表以获得一个看起来包含所需的一组数字的结果集。

当然,在这一点上,我们现在必须跳过几圈,才能让数据服务器生成一系列数字(在某种程度上是有效的方法)作为单个结果集。

Sybase/ASE可以通过其他方法生成一系列数字(例如,创建/填充带有标识列的表),但所有这些都需要一些良好的数据服务器资源,或者( b)一些复杂的代码(例如,应用程序上下文函数,插件java代码).执行客户端/前端应用程序可能更有效地处理的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44028603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档