按参数排序

时间:2010-03-04 11:11:10

标签: sql-server stored-procedures sql-order-by

您好我有一个商店程序,我在那里进行选择查询。 我希望通过外部参数来订购。

我发布了一个最小的例子:

CREATE PROCEDURE [dbo].[up_missioni_get_data]
@order VarChar(100)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT  * from missioni ORDER BY ...
END

为了做到这一点,我可以写什么?

感谢

3 个答案:

答案 0 :(得分:8)

您有2个选项,可以使用CASE语句,也可以使用动态sql

这将是CASE声明的一个例子

DECLARE @Table TABLE(
        Col1 VARCHAR(10),
        Col2 VARCHAR(10)
)

DECLARE @OrderBy VARCHAR(100)

SET @OrderBy = 'Col1'

SELECT  *
FROM    @Table
ORDER BY 
        CASE
            WHEN @OrderBy = 'Col1' THEN Col1
            WHEN @OrderBy = 'Col2' THEN Col2
            ELSE Col1
        END

这将是动态sql的例子

CREATE TABLE #Table (
        Col1 VARCHAR(10),
        Col2 VARCHAR(10)
)

DECLARE @OrderBy VARCHAR(100)

SET @OrderBy = 'Col1'

DECLARE @SqlString NVARCHAR(MAX)

SELECT @SqlString = 'SELECT * FROM #Table ORDER BY ' + @OrderBy

EXEC(@Sqlstring)

DROP TABLE #Table

答案 1 :(得分:2)

另一个选项是为要排序的列使用表达式。

DECLARE @OrderBy INT

SET @OrderBy = 4

SELECT     *
FROM         MySourceTable
ORDER BY COL_NAME(OBJECT_ID('MySourceTable'), @OrderBy )

如果可以,通常最好避免使用动态SQL。

答案 2 :(得分:-1)

您将使用字符串连接和sp_executesql