AnP/SQLServer/AnP.10.common.server.sql
2026-07-11 10:47:39 +02:00

58 lines
1.7 KiB
Transact-SQL

use AnP
if object_id(N'dbo.where_set', N'FN') is not null drop function dbo.where_set
go
create function dbo.where_set(
@new_where varchar(max),
@old_where varchar(max)
) returns varchar(max) begin
return (case when isnull(@new_where, '') = '' then isnull(@old_where, '') else (case when isnull(@old_where, '') = '' then @new_where else '(' + @new_where + ') and (' + @old_where + ')' end) end)
end
go
if object_id(N'dbo.tables_list', N'P') is not null drop procedure dbo.tables_list
go
create procedure tables_list(
@view varchar(max),
@page integer,
@items_per_page integer,
@where varchar(max),
@order_by varchar(max),
@has_errors bit,
@pages integer output,
@items integer output,
@results integer output
) as begin
declare @item_from integer
declare @query nvarchar(max)
declare @where_string varchar(max)
set nocount on
if @has_errors = 1
set @where = dbo.where_set('0 = 1', @where)
set @where_string = (case when isnull(@where, '') = '' then '' else ' where ' + @where end)
set @query = N'select top 1 @subitems = count(1) from ' + @view + @where_string
execute sp_executesql @query, N'@subitems integer output', @subitems = @items output
set @pages = ceiling(@items / cast(@items_per_page as float))
if @page < 1
set @page = 1
else if @pages > 0 and @page > @pages
set @page = @pages
set @query = (
N'select * from ' + @view + @where_string +
' order by ' + (case when isnull(@order_by, '') = '' then 'id asc' else @order_by end) +
' offset ' + convert(varchar(14), (@page - 1) * @items_per_page) + ' rows fetch next ' + convert(varchar(14), @items_per_page) + ' rows only'
)
execute sp_executesql @query
set @results = @@rowcount
end
go