Hi,
Is there any way of passing a variable instead of a hard-coded column name in the ORDER BY clause E.g.
declare @OrderCol int
set @OrderCol = 1 select * from tbl_Box order by @OrderCol
I know the above code won't run. What I need is be able to determine to sort column at run-time so that instead of writing four different stored procedures with hard-coded order by clauses, I could pass the sort column as an extra parameter to a generic stored procedure. Is that possible at all
Any help will be appreciated.
Cheers,
Vladislav

ORDER BY clause - newbie question
FireSon
Hi,
Maybe you can use a construction like:
Select * From Table
Order by Case @xSort
When 1 Then ColumnName1
When 2 Then ColumnName2
When 3 Then ColumnName3
End
The @xSort would need to be an input parameter to your procedure
Best regards Georg
www.l4ndash.com - Log4net Dashboard / Log4net viewer
visent
Drew,
Thanks a bunch. I tried the initial version. As you predicted, I got an exception because my query indeed had a column that could not be converted to the first column. With nothing in MSDN, I was just about to rewrite the stored procedure, when I thought I should check out the forum once more.
Once again, thank a lot.
Cheers,
Vladislav
marouane
Thanks alot, Georg. This is certainly a better solution.
Regards,
Vladislav
Joseph D.L.
...
order by
case @xSort when 1 then ColumnName1 end,
case @xSort when 2 then ColumnName2 end,
case @xSort when 3 then ColumnName3 end
If you don't do this, the CASE statement will raise an exception the first time you sort by a column containing a value that cannot be converted to the highest-precedence type of the three columns.
This version will also avoid unnecessary type conversion in the CASE statement that could lead to a slower-running query, if an index can't be used as a result.
Steve Kass
Drew University
GEO_Barrett
Hi Rob,
Thanks a lot. This should certainly help. What I was also looking for is be able to create the following stored procedure
MyDB_sp_GetBoxesByCustomerId [param 1] @CustomerId int, [param 2] @SortColumn nvarchar(128)
After some data manipulation, this stored procedure would return a resultset sorted based on the input column name. I would use this stored procedure in my .NET application.
Thanks to your advice, I now know I can build an SQL string and, using sp_exectesql, run it in a .NET program, but I was hoping to find a solution to keep all the 'messy' SQL manipulations inside the stored procedure. Do you think this will be possible
Once again, thanks your your help.
Cheers,
Vladislav
mitr_ar
Hi Vladislav,
Yes, you can. In your scenario, you would:
declare @s nvarchar(255),
@c nvarchar(100)
set @s = 'select * from tblBox order by '
set @c = '1' --or 2 or 'BoxNumber' etc.
set @s = @s + @c
exec sp_executesql @s
Cheers
Rob