当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

数据库查询后果的动态排序(4)[MSSQL防范]

赞助商链接



  本文“数据库查询后果的动态排序(4)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
4、动态履行

  利用动态履行技术,我们可以更轻松地编写出GetSortedShippers存储历程.利用这种办法时,我们只需动态地构造出SELECT语句,然后用EXEC()号令履行这个SELECT语句.假定传送给存储历程的参数是列的名字,存储历程可以大大缩短:

ALTER PROC GetSortedShippers

@ColName AS sysname

AS

EXEC('SELECT * FROM Shippers ORDER BY ' +

@ColName)

  在sql server 2000和7.0中,你可以用系统存储历程sp_ExecuteSQL替换Exec()号令.BOL阐明了利用sp_ExecuteSQL比利用Exec()号令更有利的地方.普通地,假如满意以下三个条件,你可以在不授与存储历程所触及对象权限的情形下,授与履行存储历程的权限:首先,只利用Data Manipulation Language(DML)语言(即SELECT,INSERT,UPDATE,DELETE);其次,全部被引用的对象都有与存储历程一样的全部者;第三,没有利用动态号令.

  上面的存储历程不能满意第三个条件.在这种情形下,你必须为全部需求利用存储历程的用户和组显式地授与Shippers表的SELECT权限.假如这一点可以承受的话,一切不存在问题.
近似地,你可以改正存储历程,使它承受一个列号参数,如Listing 8所示.

【Listing 8:用列号作为参数,动态履行(代码较长的办法)】

ALTER PROC GetSortedShippers

@ColNumber AS int

AS

DECLARE @cmd AS varchar(8000)

SET @cmd = 'SELECT * FROM Shippers ORDER BY ' +

CASE @ColNumber

WHEN 1 THEN 'ShipperID'

WHEN 2 THEN 'CompanyName'

WHEN 3 THEN 'Phone'

ELSE 'NULL'

END

EXEC(@cmd)

  注意,当你利用了函数时,你应当在一个变量而不是EXEC()号令内构造SELECT语句.此时,CASE表达式动态地肯定利用哪一个列.还有一种更简短的格局,T-SQL答应在ORDER BY子句中指定SELECT清单中列的位置,如Listing 9所示.这种格局顺从了SQL-92尺度,但ANSI SQL-99尺度不支持这种格局,所以最好不要利用这种格局.

【Listing 9:列号作为参数,动态履行(代码较短的办法)】

ALTER PROC GetSortedShippers

@ColNumber AS int

AS

DECLARE @cmd AS varchar(8000)

SET @cmd = 'SELECT * FROM Shippers ORDER BY ' + CAST(@ColNumber AS varchar(4))

EXEC(@cmd)   以上是“数据库查询后果的动态排序(4)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 基于WEB的数据库查询
  • SQL Server数据库查验
  • 数据库查询中的特别字符的问题
  • 数据库查询后果的动态排序(2)
  • 数据库查询后果的动态排序(3)
  • 数据库查询后果的动态排序(4)
  • 数据库查询后果的动态排序(5)
  • 数据库查询后果的动态排序(1)
  • SQL Server数据库查询优化的常用办法总结
  • 通用SQL数据库查询语句精华利用简介
  • Java理论与实践:在没有数据库的情形下举行数据库查询
  • 三个办法优化MySQL数据库查询
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .