首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 階層式會員資料查詢:以單一 SQL 語句取代迴圈邏輯

     編輯:程式設計綜合問答

需求場景

會員分級(一級~五級),高階會員可查看低階會員資料:一級看二~五級、二級看三~五級,以此類推。初學者嘗試用 for 迴圈或 switch 配合多條 SQL 實現,實際上單一查詢即可完成。

核心 SQL 寫法

-- 假設目前登入會員 ID 為 @CurrentUserId
SELECT t.*
FROM Members t
WHERE t.UserLevel > (
    SELECT UserLevel FROM Members WHERE Id = @CurrentUserId
);

C# 完整範例

using (var conn = new SqlConnection(connStr))
{
    string sql = @"
        SELECT * FROM Members
        WHERE UserLevel > (SELECT UserLevel FROM Members WHERE Id = @CurrentUserId)";

    using (var cmd = new SqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@CurrentUserId", currentUserId);
        using (var da = new SqlDataAdapter(cmd))
        {
            var dt = new DataTable();
            da.Fill(dt);
            gridView.DataSource = dt;
            gridView.DataBind();
        }
    }
}

關鍵優勢

  • 效能:單次往返資料庫,避免 N+1 查詢問題。
  • 安全:使用參數化查詢防止 SQL Injection。
  • 可維護:邏輯集中在 SQL,業務調整只需修改 WHERE 條件。

擴充建議

  • 若會員層級非數值型,可建立 LevelRank 對照表或使用 CASE WHEN 映射排序權重。
  • 大量資料時,於 UserLevel、Id 建立索引。
  • 配合 ROW_NUMBER() 實作分頁查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved