我正在写一个代码,支持不同版本的Sybase ASE。我正在使用联合查询,问题是不同版本的Sybase ASE在联合查询中支持不同数量的表。联合查询是动态的,并且将根据服务器中存在的数据库数量来形成。
有没有办法可以找到特定Sybase ASE支持的最大表数?我现在知道的唯一解决方案是使用query获取版本,并从结果中选择版本号,然后在代码中相应地设置版本号。但这不是一个很好的解决方案。我试着检查是否有表存储了这个值,但是没有结果。有没有人能对此提出解决方案?
发布于 2017-05-26 07:56:14
由于这是您在此处重新发布的我的SAP回复,因此我将添加更多注释……
create proxy_table tracedir external directory at '/tmp' go delete tracedir where filename = 'my_serverlmiits' go
再一次..。
如果你要经常这样做的话...而且你只对(联合)查询中的最大表数感兴趣,那么构建一个静态的if/ then /else (或case)表达式来匹配你的ASE版本和几个可能的数字可能会容易得多(参见RobV的文章)。
让我们面对它,有多少次真的,真的,真的要构建一个超过100个表的查询,更不用说500个,1000个,更多了?你真的不想去尝试调整这样一个怪物!!老实说,我看不出有什么理由要使代理表解决方案产品化,只为了访问dbcc服务器限制中的一行,而您只需要实现一个硬限制(例如,最多100个表)。
我想得越多,作为一名DBA,我就会尽我所能确保您的应用程序不会因为开发人员想不出更有效的解决方案而创建一些怪异的、数百个表查询,最终导致我的数据服务器瘫痪。天哪,这种类型的应用程序不会被推广到普通用户社区,也就是说,我将不得不处理在我的数据服务器上运行的数十/数百个这种怪物的副本?!
发布于 2017-04-13 15:00:52
您可以通过运行'dbcc serverlimits‘获得这样的限制(首先启用traceflag 3604 )。
在15.7版本之前,最大值为256。在16.0中,这一数字提高到512。在16.0 SP01中,这个值再次提高到1023。
发布于 2017-04-12 21:03:35
我建议您打开一个案例/票证与SAP支持,以了解是否有任何系统表存储此信息。如果没有,我将实现您提到的繁琐的解决方案,并将监视ASE15.7日志中的以下错误:
CR 805525 -- If you exceed the number of tables in a UNION query you can get a signal 11 in ord_getrowbounds instead of an error message. https://stackoverflow.com/questions/43361888
复制相似问题