SQL,姓名分类求大神指点

qq_30850323 2016-07-03 02:07:15
SQL 姓名按照拼音首字母分类显示,全部显示在一个页面。
功能已经实现了,但是循环用得太多了,数据也大。求大神帮忙把代码优化一下

...全文
531 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30850323 2016-09-14
  • 打赏
  • 举报
回复
引用 3 楼 ch21st 的回复:
看你的程序,每个字母都去读一次数据库,读数据库次数太多了,其实没有必要,比如: 你可以像下面这样将所有要显示的一次读出,然后循环数据,当alph发生改变代表新的字母开始。 其实甚至都可以将HMTL直接在SQL中组合出来

;WITH ArbitratorInfo(NamePinYin,CurrentStatus) AS (
	SELECT 'Ali','Y' UNION ALL
	SELECT 'Bob','Y' UNION ALL
	SELECT 'ZeDong','Y' 
	)

SELECT  sv.number,char(sv.number) as alph ,ai.NamePinYin
FROM  master.dbo.spt_values as sv 
LEFT JOIN ArbitratorInfo AS ai ON LEFT(UPPER(ai.NamePinYin),1)=CHAR(sv.number) AND CurrentStatus='Y'
WHERE sv.type='P'
AND sv.number between ascii('A') and ascii('Z')

感谢,后来优化过了,就忘记这个帖子了。不好意思!
qq_30850323 2016-09-14
  • 打赏
  • 举报
回复
引用 2 楼 ap0405140 的回复:
建议参考 http://blog.csdn.net/aimartt/article/details/8114233
感谢,后来优化过了,就忘记这个帖子了。不好意思!
道素 2016-07-04
  • 打赏
  • 举报
回复
看你的程序,每个字母都去读一次数据库,读数据库次数太多了,其实没有必要,比如: 你可以像下面这样将所有要显示的一次读出,然后循环数据,当alph发生改变代表新的字母开始。 其实甚至都可以将HMTL直接在SQL中组合出来

;WITH ArbitratorInfo(NamePinYin,CurrentStatus) AS (
	SELECT 'Ali','Y' UNION ALL
	SELECT 'Bob','Y' UNION ALL
	SELECT 'ZeDong','Y' 
	)

SELECT  sv.number,char(sv.number) as alph ,ai.NamePinYin
FROM  master.dbo.spt_values as sv 
LEFT JOIN ArbitratorInfo AS ai ON LEFT(UPPER(ai.NamePinYin),1)=CHAR(sv.number) AND CurrentStatus='Y'
WHERE sv.type='P'
AND sv.number between ascii('A') and ascii('Z')

唐诗三百首 2016-07-03
  • 打赏
  • 举报
回复
qq_30850323 2016-07-03
  • 打赏
  • 举报
回复
我写的代码,电脑配置差一点的,打开需要4,5秒才能全部读出来。 有没有老前辈指点一下,给个思路也可以。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧