SQL 编程中的动态排序与用户自定义函数
1. 动态排序
1.1 动态排序需求与常见问题
动态排序是常见的应用需求。例如,在 TSQLV3 数据库中开发一个名为 dbo.GetSortedShippers 的存储过程,该过程接受一个输入参数 @colname ,用于返回 Sales.Shippers 表按输入列名排序的行。
最初尝试使用基于 CASE 表达式的静态查询进行排序,代码如下:
ORDER BY
CASE @colname
WHEN N'shipperid' THEN shipperid
WHEN N'companyname' THEN companyname
WHEN N'phone' THEN phone
END
但当传入 N'companyname' 作为输入时,会出现类型转换错误。原因是 CASE 表达式的结果类型由操作数的数据类型优先级决定,在这三个操作数中, INT 类型优先级最高,所以 CASE 表达式的类型被预先确定为 INT ,SQL Server 会尝试将 companyname 的值转换为整数,从而导致失败。
超级会员免费看
订阅专栏 解锁全文
5万+

被折叠的 条评论
为什么被折叠?



