最近在修bug的时候出现了一个问题,系统中会根据项目的多少动态的去创建一个视图来将所有项目的某些数据union到一起。当系统的项目数量超过256时,问题出现了。SQL Server会抛出如下异常:
Msg 106, Level 15, State 1, Procedure vsp_T, Line 256 Too many table names in the query. The maximum allowable is 256. 当然将所有项目的数据union到一个视图绝对是一个蹩脚的设计,然而要改这个设计着实困难,怎么办呢? 经过测试发现SQL Server T-SQL批处理完全支持union256个以上的表,而且存储过程也支持引用超过256个以上的表。 于是将原先创建视图的语句由create view 改为 create procedure,存储过程不带任何参数;原先调select * from 视图地方的SQL语句改为exec存储过程。 这样系统项目数量再也不受256的限制了。 不过当系统中的项目多达10000时,单单创建一个union所有项目数据的存储过程就花了十几秒,而执行这个存储过程花了4分钟多。所以,要根本解决这个问题,还是应该从设计上避免出现多表union或者join的情况!
解决SQL Server中视图最多只能引用256个表的一种办法
最新推荐文章于 2024-08-12 03:52:09 发布
在使用SQLServer时遇到Union超过256表的问题,并通过将视图更改为存储过程的方法解决了该问题。但当项目数达到10000时,创建和执行存储过程的时间过长,提示需要从根本上改进设计。

948

被折叠的 条评论
为什么被折叠?



