Нужно написать хранимую процедуру, которая делает выборку из таблицы и упорядочевает её (ORDER BY), но нужно, чтобы столбец по которому сортировать и направление сортировки передавались в процедуру как параметры.
CREATE PROCEDURE dbo.some_ls
@i_SORT_BY VARCHAR,
@i_SORT_DIRECTION VARCHAR
Здравствуйте, Gasy, Вы писали:
G>G>CREATE PROCEDURE dbo.some_ls
G> @i_SORT_BY VARCHAR,
G> @i_SORT_DIRECTION VARCHAR
G>
dinamic SQL спасет тебя.
читаем про
EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )
и
sp_executesql [@stmt =] stmt
[
{, [@params =] N'@parameter_name data_type [,...n]' }
{, [@param1 =] 'value1' [,...n] }
]
... << RSDN@Home 1.1.2 stable >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Здравствуйте, Gasy, Вы писали:
G>Нужно написать хранимую процедуру, которая делает выборку из таблицы и упорядочевает её (ORDER BY), но нужно, чтобы столбец по которому сортировать и направление сортировки передавались в процедуру как параметры.
CREATE PROCEDURE dbo.some_ls
@i_SORT_BY VARCHAR,
@i_SORT_DIRECTION VARCHAR
AS
BEGIN
declare @some_var varchar(20)
set @some_var = ', 2'
declare @dyn_sql nvarchar(255)
set @dyn_sql = N'select 1 ' + convert(nvarchar, @some_var)
exec sp_executesql @stmt = @dyn_sql
END
GO
Здравствуйте, Gasy, Вы писали:
G>Нужно написать хранимую процедуру, которая делает выборку из таблицы и упорядочевает её (ORDER BY), но нужно, чтобы столбец по которому сортировать и направление сортировки передавались в процедуру как параметры.
G>G>CREATE PROCEDURE dbo.some_ls
G> @i_SORT_BY VARCHAR,
G> @i_SORT_DIRECTION VARCHAR
G>
create procedure dbo.ordered_select
@sort_condition varchar(1024)
as
begin
decalre ordered_select varchar(1024);
set ordered_select = 'select ... order by ';
...
execute (@ordered_select + @sort_condition);
end;
Есть вариант передавать в процедуру номер столбца, по которому требуется делать сортировку.
А в возвращаемом наборе подставлять ее в ордер.
Например
create procedure sp_x (@ord int)
as
...
select Name, Amount, StartDate, ...
...
order by @ord
return
или если поля разного типа, то:
order by
case when @ord = 1 then Name end,
case when @ord = 2 then Amount end,
case when @ord = 3 then StartDate end
Поэкспериментируй — там много вариантов сортировки можно применить.