数据库查询结果的动态排序(4)
2007-11-11 04:05:23 来源:WEB开发网核心提示: 类似地,你可以修改存储过程,数据库查询结果的动态排序(4)(2),使它接受一个列号参数,如Listing 8所示,但ANSI SQL-99标准不支持这种格式,所以最好不要使用这种格式, 【Listing 8:用列号作为参数,动态执行(代码较长的方法)】 ALTER PROC Ge
类似地,你可以修改存储过程,使它接受一个列号参数,如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)
【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)
更多精彩
赞助商链接