порядок параметром

Привет у меня есть процедура хранилища, где я делаю запрос Select. Я хочу, заказывают это внешним параметром.

Я отправляю минимальный пример:

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

Чем я могу записать в порядке для, делают это?

спасибо

11
задан Luca Romagnoli 4 March 2010 в 11:11
поделиться

3 ответа

У вас есть 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
8
ответ дан 3 December 2019 в 10:25
поделиться

Другой вариант - использовать выражение для столбца, по которому вы хотите выполнить сортировку.

DECLARE @OrderBy INT

SET @OrderBy = 4

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

Обычно лучше по возможности избегать динамического sql.

2
ответ дан 3 December 2019 в 10:25
поделиться

Вам придется использовать конкатенацию строк и sp_executesql.

-1
ответ дан 3 December 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: