首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 預存程序動態排序:以參數指定任意欄位

     編輯:關於SqlServer

專案需求:在預存程序中依傳入參數動態決定 ORDER BY 排序欄位。直接使用變數如 ORDER BY @Parameter DESC 會報錯:「ORDER BY 子句不允許變數指定欄位位置」。

解決方案:動態 SQL

利用動態 SQL 組裝查詢字串再執行:

CREATE PROCEDURE proc_test
  @fieldname VARCHAR(50)
AS
BEGIN
  DECLARE @sql VARCHAR(1000);
  SET @sql = 'SELECT * FROM SiteDetailInfo WHERE SiteBasicId = @SiteId AND SiteIsCheck = 1 ORDER BY ' + QUOTENAME(@fieldname) + ' DESC';
  EXEC sp_executesql @sql, N'@SiteId INT', @SiteId = @SiteId;
END

關鍵點:

  • 使用 QUOTENAME() 防止 SQL 注入,確保欄位名稱合法。
  • 搭配 sp_executesql 參數化查詢,提升計畫重用與安全性。
  • 避免直接字串拼接使用者輸入,降低注入風險。

另一種作法是 CASE 運算式,但僅適用於已知有限欄位:

ORDER BY CASE @fieldname
  WHEN 'Column1' THEN Column1
  WHEN 'Column2' THEN Column2
  ELSE Column1 END DESC

動態 SQL 靈活度最高,適用於欄位不固定的情境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved