2015-10-06 31 views
0

我需要創建一個MSSQL的查詢,在查詢我想放8個參數,它們分別是:添加額外的參數,在MS SQL查詢

  1. table_primary_key:主鍵列名,
  2. TABLE_NAME:表名,
  3. START_ROW:從這一行開始,
  4. limit_row:結束行,
  5. 列名:其中列名,
  6. column_value:其中列名=列值,
  7. sort_by:按列名排序。
  8. order:ASC/DESC。

注意:大膽的是我還沒有實現的那個。

我當前的查詢是這樣的:

SELECT * 
FROM ( 
     SELECT *, 
       ROW_NUMBER() OVER (ORDER BY *sort_by*) as row 
     FROM *table_name* 
     ) a 
WHERE row > *start_row* AND row <= *limit_row* 

我的問題是我怎麼加table_primary_key列名COLUMN_VALUE爲了我現在的查詢?

我的目標是從table_name的讓查詢顯示的數據,從 START_ROW開始直到limit_row,其中列名= COLUMN_VALUE。和 數據將是排序sort_by和順序是根據訂單

如果我的問題INT不夠清楚,請詢問,謝謝

+0

看看動態SQL和EXEC – Shnugo

+0

背後的邏輯是什麼?請張貼一些數據和預期結果。 –

+0

@Shnugo謝謝,我會研究它 – stacheldraht27

回答

0

你可以嘗試使用動態SQL表達式是這樣的:

declare 
    @table_primary_key varchar(max) = 'ProjectID', 
    @table_name varchar(max) = 'ProjectList', 
    @start_row int = 10, 
    @limit_row int = 20, 
    @column_name varchar(max) = 'ProjectStatus', 
    @column_value varchar(max) = '5', 
    @sort_by varchar(max) = 'ProjectName', 
    @order varchar(4) = 'ASC' -- 'DESC' 

declare 
    @sql varchar(max) = '' 

set @sql = 'SELECT * FROM (' 
      + 'SELECT ' + @table_primary_key + ', ROW_NUMBER() OVER (ORDER BY ' + @sort_by + ' ' + @order + ') as row FROM ' + @table_name + ' WHERE ' + @column_name + ' = ''' + @column_value + ''') a' 
      + ' WHERE row > ' + cast(@start_row as varchar) + ' and row <= ' + cast(@limit_row as varchar) 

exec (@sql) 

或者您可以使用存儲過程

create procedure dbo.GetResults 
(
    @table_primary_key varchar(max), 
    @table_name varchar(max), 
    @start_row int, 
    @limit_row int, 
    @column_name varchar(max), 
    @column_value varchar(max), 
    @sort_by varchar(max), 
    @order varchar(4) 
) 
as 
begin 
    declare 
    @sql varchar(max) = '' 

    set @sql = 'SELECT * FROM (' 
      + 'SELECT ' + @table_primary_key + ', ROW_NUMBER() OVER (ORDER BY ' + @sort_by + ' ' + @order + ') as row FROM ' + @table_name + ' WHERE ' + @column_name + ' = ''' + @column_value + ''') a' 
      + ' WHERE row > ' + cast(@start_row as varchar) + ' and row <= ' + cast(@limit_row as varchar) 

    exec (@sql) 
end 

,然後... ...

exec GetResults 'ProjectID', 'ProjectList', 10, 20, 'ProjectStatus', '5', 'ProjectName', 'ASC' 
+0

謝謝@JerzyG,但是您的查詢沒有包含列名,並且列值 – stacheldraht27

+0

可否請您添加column_name和column_value來查詢?,謝謝^^ – stacheldraht27

+0

I'我修改了額外條件'@column_name = @ column_value'的來源。對於數值類型,您應該將'''''更改爲'''。 –