2009-09-20 77 views
0

在我的應用程序中,任何用戶都可以配置要顯示,重新排序和調整列大小的列。爲了保存每個用戶設置,我有幾個表格。SQL僅選擇存在於單獨元數據表中的行

其中一個被稱爲UserColumns,看起來像這樣:

Id | UserId | ColumnName | DefaultWidth | Width | SortOrder 

有什麼辦法,沒有動態生成的選擇字符串,並執行它,我可以從表中選擇列,但只有UserColumns表中存在的特定用戶列?

所以像ApplicationErrors的表:

Id | ExceptionMessage | StackTrace | LogDate 

與ID = 1的用戶,得到了這些列選自: 堆棧跟蹤,LOGDATE。

所以我想獲得一個只有StackTrace和LogDate存在的結果集,按照UserColumns表中的SortOrder列的值排序。

這可能嗎?

回答

3

爲了執行未知列的選擇,您需要動態生成查詢並執行它。

如果你只有幾個用戶,那麼你可以創建一個視圖,並使用創建一個表將視圖鏈接到一個用戶,你也許可以選擇基於視圖,但是,然後你的應用程序會想要要做到這一點,因爲它可以動態創建一個帶有變量表的查詢。

+0

好吧,我明白了。 我想我只是選擇表中的所有列,然後在顯示用戶的結果集時,我只顯示UserColumns表中包含的那些列。 或與動態SQL生成。這是一件壞事,性能明智(或其他方面)? – MartinHN 2009-09-20 01:14:18

+1

@MartinHN:SQL Server將緩存動態SQL的執行計劃,因此假設您不同時處理數千個不同的查詢,那麼性能影響應該可以忽略不計。要提高緩存的有效性,請確保將任何可以作爲參數的值(例如,任何WHERE子句中的值)。 – 2009-09-20 01:33:49

+0

這是一篇關於通過存儲過程進行動態查詢性能的文章:http://weblogs.asp.net/aagui/archive/2006/06/22/Stored-Procs-vs-Dynamic-SQL.aspx – 2009-09-20 01:58:02