Sql-Server
通過參數在百分比和行之間切換 TOP 子句
對於一份報告,我正在查詢使用者假設必鬚根據百分比或固定行數選擇 TOP 值。
我有兩個想法
根據傳遞的參數呼叫兩個不同的子儲存過程。
if @param ='percent' begin exec sp_data_TOP_by_Percent end if @param ='perRow' begin exec sp_data_TOP_by_PerRow end
另一個想法是使動態 TSQL 查詢像這樣
declare @command nchar(max) select @command = 'select top(10) ' + case @param when 'percent' then percent else ' ' end + ' * ' + 'from table order by 1'; exec sp_executesql @command
這樣的事情有第三種解決方案嗎?
什麼是更好的方法?第一個避免動態 TSQL,但更難在兩個地方維護程式碼。我使用 MSSQL2005 作為數據庫。
為了避免動態 SQL,我有 2 個單獨的查詢/儲存過程。
一個儲存過程中的 IF 語句也足夠了
為了詳細說明gbn 的答案,兩個儲存過程是更好的方法;此外,我會更進一步,將查詢(sans
top
子句)放在一個表值函式中,然後讓儲存過程只不過是一個呼叫 TVF 並top
適當應用子句的 shell(按行數或百分)。這裡唯一需要注意的是,如果您使用 TVF,請嘗試確保它是內聯 TVF,因為它允許查詢分析器使用統計資訊(很像視圖)。