Привет у меня есть процедура хранилища, где я делаю запрос 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
Чем я могу записать в порядке для, делают это?
спасибо
У вас есть 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
Другой вариант - использовать выражение для столбца, по которому вы хотите выполнить сортировку.
DECLARE @OrderBy INT
SET @OrderBy = 4
SELECT *
FROM MySourceTable
ORDER BY COL_NAME(OBJECT_ID('MySourceTable'), @OrderBy )
Обычно лучше по возможности избегать динамического sql.
Вам придется использовать конкатенацию строк и sp_executesql.