• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

您的位置:您的位置:软件测试技术网 >> 软件测试技术 >> 开发语言 >> 数据库 >> 查看资讯

字号: | 推荐给好友 上一篇 | 下一篇

数据库查询结果的动态排序

发布: 2008-10-14 11:53 | 作者: 不详 | 来源: programfan.com  | 查看: 35次 | 进入领测软件测试网论坛讨论

领测软件测试网 软件测试技术网!AhNn5B V v9KSb

软件测试技术网Y0??7rE ~[9E

四、动态执行

&{4ph-sz lM3V

4A7^pvU&F  使用动态执行技术,我们能够更轻松地编写出GetSortedShippers存储过程。使用这种方法,我们只需动态地构造出SELECT语句,然后用EXEC()命令执行这个SELECT语句。假设传递给存储过程的参数是列的名字,存储过程可以大大缩短:软件测试技术网8^%WC@L

:[ ?B%V'w  ALTER PROC GetSortedShippers软件测试技术网;ye:uj+M"r n'S

软件测试技术网@'~N5S-pFL5p i

  @ColName AS sysname

,t|5r zAkg 软件测试技术网 }m/h"m7`

  AS软件测试技术网b3f Q%I[S7o

}#j"P1LC*_ J!X  EXEC('SELECT * FROM Shippers ORDER BY ' + @ColName)软件测试技术网 yY ~,b4v Q-}h*g)@vz

_ d|`6S%LBC:x  在SQL Server 2000和7.0中,你可以用系统存储过程sp_ExecuteSQL替代Exec()命令。BOL说明了使用sp_ExecuteSQL比使用Exec()命令更有利的地方。一般地,如果满足以下三个条件,你能够在不授予存储过程所涉及对象权限的情况下,授予执行存储过程的权限:

wr4f+\*`5|RM

g%M Oy}5BR$vD  首先,只使用Data Manipulation Language(DML)语言(即SELECT,INSERT,UPDATE,DELETE);其次,所有被引用的对象都有与存储过程同样的所有者;第三,没有使用动态命令。软件测试技术网GSZ"TF\2i)v'w9j!t

软件测试技术网R"mDV]

  上面的存储过程不能满足第三个条件。在这种情况下,你必须为所有需要使用存储过程的用户和组显式地授予Shippers表的SELECT权限。如果这一点可以接受的话,一切不存在问题。类似地,你可以修改存储过程,使它接受一个列号参数,如Listing 8所示。

.C