November 24, 2004 at 12:17 pm
Is it possible to take in a parameter and use it as the column name or column number in the ORDER BY clause of a SQL statement? I've copied the SP_Columns stored procedure and created a new one from it. I want to specify a sort order as one of the parameters when I run the new SP_Columns_Sorted procedure. It works fine if I hard code the value 4 in the ORDER BY clause but I'd like to take it one step further and be able to specify any column to sort on. I modified the procedure to add a new parameter as so:
CREATE PROCEDURE sp_columns_sorted(
@table_name nvarchar(384),
@table_owner nvarchar(384) = null,
@table_qualifier sysname = null,
@column_name nvarchar(384) = null,
@ODBCVer int = 2,
@Order_By nvarchar(384))
AS
....
Then I modified the two ORDER BY clauses to be:
ORDER BY @Order_By
and I get back the following message when I try to run the CREATE PROCEDURE code:
Server: Msg 1008, Level 15, State 1, Procedure sp_columns_by_name, Line 113
The SELECT item identified by the ORDER BY number 1 contains a variable as part of the expression identifying a column position. Variables are only allowed when ordering by an expression referencing a column name.
Any help would be greatly appreciated!
Jim
November 24, 2004 at 12:22 pm
You may try CASE statement like
ORDER BY
CASE WHEN @ColumnName='LastName' THEN LastName
WHEN @ColumnName='Salary' THEN CONVERT(varchar(50), Salary)
WHEN @ColumnName='SSN' THEN SSN
END
November 24, 2004 at 12:41 pm
Is there no other way? Doesn't MS-SQL have a way of using the value of a variable to substitute in places like the ORDER BY clause? I believe I've seen T-SQL code that uses a @varname parameter to substitute for a column name in the SELECT portion of a query.
Jim
November 24, 2004 at 12:48 pm
Or try dynamic query.
declare @cmd varchar(1024)
declare @orderby varchar(10)
select @cmd = "select * from authors order by " + @orderby
exec (@cmd)
November 25, 2004 at 1:03 am
May I add that I would prefer sp_executeSQL rather than EXEC() if it need to be dynamic?
Why? http://www.sommarskog.se/dynamic_sql.html
--
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org/blogs
My blog: http://www.insidesql.org/blogs/frankkalis/[/url]
Viewing 5 posts - 1 through 4 (of 4 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy