当前位置: 代码迷 >> Sql Server >> 给存储过程加下一个是否去重复的参数(sql server数据库)
  详细解决方案

给存储过程加下一个是否去重复的参数(sql server数据库)

热度:76   发布时间:2016-04-27 11:00:12.0
给存储过程加上一个是否去重复的参数(sql server数据库)
这是我的一个存储过程 现在不能实现去重复:
USE [test]
GO
/****** Object: StoredProcedure [dbo].[testcc] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[uspGetPage]
(
 @Tables nvarchar(1000), --表名
 @Fields nvarchar(2000)='*', --字段
 @PageIndex int=1, --第N页
 @PageSize int=10, --每页的大小
 @Where nvarchar(4000)='', --条件
 @OrderBy nvarchar(200), --排序
 @TotalRecord int = 0 output --符合条件记录数量
 )
AS
BEGIN

Declare @SQL nvarchar(max)

-- @Where 处理
SELECT @Where=(CASE WHEN (@Where IS NULL OR @Where='') THEN '' ELSE ' Where [email protected] END)

--计算总记录数
set @SQL = 'select @Total = count(1) from ' + @Tables + @Where
EXEC sp_executesql @SQL,[email protected] int OUTPUT',@TotalRecord OUTPUT


 --计算边界
 SELECT @PageIndex=(CASE WHEN @PageIndex<1 THEN 1 ELSE @PageIndex-1 END)

 --下面构造分页函数

 SELECT @SQL='SELECT row_number() OVER (ORDER BY [email protected]+') AS _rowid, '+ @Fields + ' FROM ' + @Tables + @Where

 --执行分页
 Declare @EXECSQL varchar(max)
 SELECT @EXECSQL='SET ROWCOUNT '+Convert(varchar(4),@PageSize)+'; WITH SP_TABLE AS( [email protected]+' ) SELECT * FROM SP_TABLE WHERE _rowid > '+ Convert(varchar(50),(@PageIndex * @PageSize))+' '
 
EXEC(@EXECSQL)

--PRINT @EXECSQL
--返回页数

END
想请 各位 大神们 帮我改一下 加一个去重复

------解决方案--------------------
try this,
SQL code
USE [test]GO/****** Object: StoredProcedure [dbo].[testcc] ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER proc [dbo].[uspGetPage]( @Tables nvarchar(1000), --表名 @Fields nvarchar(2000)='*', --字段 @PageIndex int=1, --第N页 @PageSize int=10, --每页的大小 @Where nvarchar(4000)='', --条件 @OrderBy nvarchar(200), --排序 @TotalRecord int = 0 output --符合条件记录数量 )ASbeginDeclare @SQL nvarchar(max)-- @Where 处理SELECT @Where=(CASE WHEN (@Where IS NULL OR @Where='') THEN '' ELSE ' Where [email protected] END)--计算总记录数set @SQL = 'select @Total = count(1) from ' + @Tables + @WhereEXEC sp_executesql @SQL,[email protected] int OUTPUT',@TotalRecord OUTPUT --计算边界 SELECT @PageIndex=(CASE WHEN @PageIndex<1 THEN 1 ELSE @PageIndex-1 END) --下面构造分页函数 SELECT @SQL='select row_number() OVER (ORDER BY [email protected]+') AS _rowid,* from (SELECT distinct '+ @Fields + ' FROM ' + @Tables + @Where + ') t' --执行分页 Declare @EXECSQL varchar(max) SELECT @EXECSQL='SET ROWCOUNT '+Convert(varchar(4),@PageSize)+'; WITH SP_TABLE AS( [email protected]+' ) SELECT * FROM SP_TABLE WHERE _rowid > '+ Convert(varchar(50),(@PageIndex * @PageSize))+' ' EXEC(@EXECSQL)--PRINT @EXECSQL--返回页数END
------解决方案--------------------
SQL code
--计算总记录数,这里估计也要去掉重复计算中记录数!set @SQL = 'select @Total = count(1) from (SELECT distinct '+ @Fields + ' FROM ' + @Tables + @Where + ') t'EXEC sp_executesql @SQL,[email protected] int OUTPUT',@TotalRecord OUTPUT
------解决方案--------------------
SQL code
USE [test]GO/****** Object: StoredProcedure [dbo].[testcc] ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER proc [dbo].[uspGetPage]( @Tables nvarchar(1000), --表名 @Fields nvarchar(2000)='*', --字段 @PageIndex int=1, --第N页 @PageSize int=10, --每页的大小 @Where nvarchar(4000)='', --条件 @OrderBy nvarchar(200), --排序 @TotalRecord int = 0 output, --符合条件记录数量 @noreplace bit=0 --为1时去重复 )ASBEGINDeclare @SQL nvarchar(max)-- @Where 处理SELECT @Where=(CASE WHEN (@Where IS NULL OR @Where='') THEN '' ELSE ' Where [email protected] END)/*加此段试试*/if @noreplace=1 --需去重复时begin    set @tables='(select '+fields+' from [email protected][email protected]+') as a'    set @where=''end--计算总记录数set @SQL = 'select @Total = count(1) from ' + @Tables + @WhereEXEC sp_executesql @SQL,[email protected] int OUTPUT',@TotalRecord OUTPUT --计算边界 SELECT @PageIndex=(CASE WHEN @PageIndex<1 THEN 1 ELSE @PageIndex-1 END) --下面构造分页函数 SELECT @SQL='SELECT row_number() OVER (ORDER BY [email protected]+') AS _rowid, '+ @Fields + ' FROM ' + @Tables + @Where --执行分页 Declare @EXECSQL varchar(max) SELECT @EXECSQL='SET ROWCOUNT '+Convert(varchar(4),@PageSize)+'; WITH SP_TABLE AS( [email protected]+' ) SELECT * FROM SP_TABLE WHERE _rowid > '+ Convert(varchar(50),(@PageIndex * @PageSize))+' ' EXEC(@EXECSQL)--PRINT @EXECSQL--返回页数END
  相关解决方案