繁体   English   中英

在ms sql查询中添加额外的参数

[英]add extra parameter in ms sql query

我需要创建一个mssql查询,在该查询中我想输入8个参数,它们是:

  1. table_primary_key :主键列名称,
  2. table_name:表名称,
  3. start_row:从这一行开始,
  4. limit_row:最后一行,
  5. column_name :列名,
  6. column_value :其中列名=列值,
  7. sort_by:按列名排序。
  8. 订购 :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_name = column_value。 数据将按sort_by排序,并且顺序是按顺序

如果我的问题很清楚,请问,谢谢

您可以尝试使用动态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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM