Sql-Server

通過參數在百分比和行之間切換 TOP 子句

  • August 14, 2018

對於一份報告,我正在查詢使用者假設必鬚根據百分比或固定行數選擇 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 的答案,兩個儲存過程是更好的方法;此外,我會更進一步,將查詢(sanstop子句)放在一個表值函式中,然後讓儲存過程只不過是一個呼叫 TVF 並top適當應用子句的 shell(按行數或百分)。

這裡唯一需要注意的是,如果您使用 TVF,請嘗試確保它是內聯 TVF,因為它允許查詢分析器使用統計資訊(很像視圖)。

引用自:https://dba.stackexchange.com/questions/7339