Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4212080
  • 博文数量: 291
  • 博客积分: 8003
  • 博客等级: 大校
  • 技术积分: 4275
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:28
文章分类

全部博文(291)

文章存档

2017年(1)

2013年(47)

2012年(115)

2011年(121)

2010年(7)

分类: C#/.net

2013-11-26 12:33:00

上周我维护的一个.net的网站出现问题了,查看详情时一旦这个详情页涉及到200个用户以上就会出现,200个以下就没有问题

我这两天抽空检查了代码,发现代码里使用的是存储过程只需动态SQL
我把.net代码里执行的sql语句手动逐一执行,发现代码是根据m_id查出一个由200多个userid拼接成的字符串,然后传到存储过程的参数里
用id in(@userids)查询数据,
我测试了一下当userids是几个时是可以执行成功的,但是当超过200个时就会报错。
我查看了存储过程的定义发现 where 定义最多是1000个字符,而200个id的字符串就会超过1000个字符,从而会被截断,从而导致sql语句执行出错

我点击存储过程->修改

修改为4000个字符后,点击,就可生效

其实这种存储过程在设计时候就有问题,不应该使用id拼接的方式来构建查询语句,应该使用联合查询或者子查询来完成,现在没有时间了,也就治标不治本吧

执行存储过程的方法是
exec dbo.proc_Pager 'V_test','U_ID',1,20,'','CreateTime desc',' U_ID in (508,1185)';
阅读(26427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~