解决SQL Server中视图最多只能引用256个表的一种办法

最近在修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的情况!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值