0
在我的應用程序中,任何用戶都可以配置要顯示,重新排序和調整列大小的列。爲了保存每個用戶設置,我有幾個表格。SQL僅選擇存在於單獨元數據表中的行
其中一個被稱爲UserColumns,看起來像這樣:
Id | UserId | ColumnName | DefaultWidth | Width | SortOrder
有什麼辦法,沒有動態生成的選擇字符串,並執行它,我可以從表中選擇列,但只有UserColumns表中存在的特定用戶列?
所以像ApplicationErrors的表:
Id | ExceptionMessage | StackTrace | LogDate
與ID = 1的用戶,得到了這些列選自: 堆棧跟蹤,LOGDATE。
所以我想獲得一個只有StackTrace和LogDate存在的結果集,按照UserColumns表中的SortOrder列的值排序。
這可能嗎?
好吧,我明白了。 我想我只是選擇表中的所有列,然後在顯示用戶的結果集時,我只顯示UserColumns表中包含的那些列。 或與動態SQL生成。這是一件壞事,性能明智(或其他方面)? – MartinHN 2009-09-20 01:14:18
@MartinHN:SQL Server將緩存動態SQL的執行計劃,因此假設您不同時處理數千個不同的查詢,那麼性能影響應該可以忽略不計。要提高緩存的有效性,請確保將任何可以作爲參數的值(例如,任何WHERE子句中的值)。 – 2009-09-20 01:33:49
這是一篇關於通過存儲過程進行動態查詢性能的文章:http://weblogs.asp.net/aagui/archive/2006/06/22/Stored-Procs-vs-Dynamic-SQL.aspx – 2009-09-20 01:58:02