我使用SQL Server 2012.我有一個名爲「Table1」的示例表,其中有七列。SQL Server中多列的動態順序
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
我創建了以下存儲過程,這個SP能夠查詢考慮通過列問道訂單數據。 我可以通過(ASC或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
現在我需要改變這個SP通過一系列列接受多列的順序。他們可以通過名字或列的順序。 在這種情況下,我應該能夠執行我的SP類似下面的命令:
EXECUTE ProceName @OrderByField='6,7,2', @OrderDirection='0,1,1'
我怎樣才能實現這一目標GOOL 使用該sp_executesql的(動態查詢)了呢?
https://sqlperformance.com/2012/08/t-sql-queries/conditional-order-by和https://blogs.sentryone.com/aaronbertrand/sql-variant-use -case/ –