Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I use SQL Server 2012. I have a sample table named 'Table1' with seven columns.
- CREATE TABLE TABLE1
- (
- Field1 INT ,
- Field2 INT ,
- Field3 INT ,
- Field4 INT ,
- Field5 INT ,
- Field6 INT ,
- Field7 INT
- )
- GO
- INSERT INTO TABLE1 VALUES (1,2,9,5,1,5,85)
- INSERT INTO TABLE1 VALUES (2,6,8,4,1,4,45)
- INSERT INTO TABLE1 VALUES (3,5,7,3,5,6,1)
- INSERT INTO TABLE1 VALUES (4,4,6,1,51,4,1)
- INSERT INTO TABLE1 VALUES (5,5,5,4,7,2,7)
- INSERT INTO TABLE1 VALUES (6,5,4,6,4,7,8)
- INSERT INTO TABLE1 VALUES (7,12,5,3,2,5,3)
- INSERT INTO TABLE1 VALUES (8,1,6,5,9,5,1)
- INSERT INTO TABLE1 VALUES (9,1,13,2,1,7,3)
- INSERT INTO TABLE1 VALUES (10,6,9,3,6,2,6)
- INSERT INTO TABLE1 VALUES (11,2,1,2,8,7,7)
- INSERT INTO TABLE1 VALUES (12,7,6,1,3,3,2)
- INSERT INTO TABLE1 VALUES (13,7,2,6,4,7,1)
- GO
- I have created the below Stored Procedure, This SP is able to query data considering the asked order by column.
- I can query my table with each possibility of single column and kind of order by (ASC or Desc).
- CREATE Procedure ProceName
- (
- @OrderByField INT = 1,
- @OrderDirection INT = 0 -- 0 = Asc , 1 = Desc
- )
- As
- Begin
- SELECT
- *
- FROM Table1
- ORDER BY
- CASE WHEN @OrderDirection=0 AND @OrderByField=1 THEN Field1 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=2 THEN Field2 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=3 THEN Field3 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=4 THEN Field4 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=5 THEN Field5 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=6 THEN Field6 END ASC,
- CASE WHEN @OrderDirection=0 AND @OrderByField=7 THEN Field7 END ASC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=1 THEN Field1 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=2 THEN Field2 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=3 THEN Field3 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=4 THEN Field4 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=5 THEN Field5 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=6 THEN Field6 END DESC,
- CASE WHEN @OrderDirection=1 AND @OrderByField=7 THEN Field7 END DESC
- End
- GO
- EXECUTE ProceName @OrderByField=1, @OrderDirection=0
- EXECUTE ProceName @OrderByField=6, @OrderDirection=1
- Now I need to change this sp for accepting multi columns as order by series columns. They can be pass by name or by order of columns.
- In this case i should be able to execute my SP like below command:
- EXECUTE ProceName @OrderByField='6,7,2', @OrderDirection='0,1,1'
- How can I achive this gool with out using the sp_executesql (Dynamic Query)?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement