SQL 合并多行记录的相同字段值

复制代码 代码如下:Declare @CurrentRecord
int,@BeginNum int, @EndNum int, @TotalCount int,@Value int set
@BeginNum=0 set @EndNum=500 set @TotalCount=80 set @CurrentRecord=1
While @CurrentRecord=@TotalCount Begin set @Value= @BeginNum+(@EndNum –
@BeginNum)*rand() update [tableName] set [columnName] = @Value
where [IDColumnName] = @CurrentRecord set
@CurrentRecord=@CurrentRecord+1 End

1.从数据库中先查询符合条件的记录,存放于一个DataTable中,在使用c#等开始遍历这张表,利用DataRow中的主键,再去读取相应的符合条件的多条记录,合并这些第二次读取到的记录内容,返回给前面的这个DataRow数据行。这样做没有错,但是如果数据量大,我们可能面临无数次的打开断开数据库链接,速度效率将会很低。
2.从数据库中一次读取数据到一张表中返回并显示到UI层。说起来谁都想这么做,但是以前太笨,没有去研究这个,今天因为数据量较大的原因,让我不得不想些其他办法来提高点效率。
Google~hk一下,果真有答案,然后依葫芦画瓢,自己写了一个
目的是获取不定量的符合条件的兼职记录,并将每个兼职参与项目情况记录到某几个字段当中,然后一次返回Table
复制代码 代码如下: Create function
Fn_GetJobListByPID–创建自定义函数获取指定兼职参与的所有项目编号及项目数量
( @ParttimerID int ) returns @t table(Jobs varchar(5000),ParttimerID
int,TotalCount int) as begin declare @sql varchar(5000),@TotalCount int
set @sql=” set @TotalCount=0 select @sql=@sql+j.JobNo+’-‘+j.JobWave+’
‘,@TotalCount=@TotalCount+1 from ONJB_JobApplication a,ONJB_Jobs j
where a.ParttimerID=@ParttimerID and a.Result=’V’ and a.JobID=j.JobID
insert @t values(@sql,@ParttimerID,@TotalCount) return end 引用 复制代码 代码如下:
–……………………… –做过项目 left join (select
Jobs,ParttimerID,TotalCount From Fn_GetJobListByPID(@ParttimerID)) as
j1 on p.ParttimerID=j1.ParttimerID –在做项目 left join (select
CurJobs,ParttimerID,CurCount From Fn_GetCurJobsByPID(@ParttimerID)) as
j2 on p.ParttimerID=j2.ParttimerID where p.ParttimerID=@ParttimerID

二种MSSQL分页存储过程实例应用html xmlns= content=text/html;
charset=gb2312 /title二种MSSQL分页存储过程实例应用/title/headbody

MSSQL分页在小型数据网站应用中,不需要用到存存储过程,只有上万百,千万级数据库教程时就会用到存储过程,

创建存储过程 CREATE PROCEDURE pagination @tblName varchar(255), — 表名
@strGetFields varchar(1000) = ‘*’, — 需要返回的列 @fldName
varchar(255)=”, — 排序的字段名(可包含如TABLE.FLDNAME形式) @PageSize
int = 10, — 页尺寸 @PageIndex int = 1, — 页码 @doCount bit = 0, —
返回记录总数, 非 0 值则返回 @OrderType bit = 0, — 设置排序类型, 非 0
值则降序 @strWhere varchar(1500) = ” — 查询条件 (注意: 不要加 where)
AS declare @strSQL varchar(5000) — 主语句 declare @strTmp varchar(110)
— 临时变量 declare @strOrder varchar(400) — 排序类型 declare
@fldName_t varchar(255) —
在分页时用的排序字段名,不包含多表并列时的表名 set @fldName_t =
right(@fldName,len(@fldName)-CHARINDEX(‘.’,@fldName)) if @doCount != 0
begin if @strWhere !=” set @strSQL = ‘select count(*) as Total from ‘

  • @tblName + ‘ where ‘+@strWhere else set @strSQL = ‘select count(*) as
    Total from ‘ + @tblName + ” end
    –以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
    else begin if @OrderType != 0 begin set @strTmp = ‘(select min’ set
    @strOrder = ‘ order by ‘ + @fldName +’ desc’
    –如果@OrderType不是0,就执行降序,这句很重要! end else begin set
    @strTmp = ‘(select max’ set @strOrder = ‘ order by ‘ + @fldName +’ asc’
    end if @PageIndex = 1 begin if @strWhere != ” set @strSQL = ‘select top
    ‘ + str(@PageSize) +’ ‘+@strGetFields+ ‘ from ‘ + @tblName + ‘ where ‘ +
    @strWhere + ‘ ‘ + @strOrder else set @strSQL = ‘select top ‘ +
    str(@PageSize) +’ ‘+@strGetFields+ ‘ from ‘+ @tblName + ‘ ‘+ @strOrder
    –如果是第一页就执行以上代码,这样会加快执行速度 end else begin
    –以下代码赋予了@strSQL以真正执行的SQL代码 set @strSQL = ‘select top ‘ +
    str(@PageSize) +’ ‘+@strGetFields+ ‘ from ‘+ @tblName + ‘ where ‘ +
    @fldName + ‘ ‘ + @strTmp + ‘ (‘+ @fldName_t + ‘) from (select top ‘ +
    str((@PageIndex-1)*@PageSize) + ‘ ‘+ @fldName + ‘ from ‘ + @tblName +
    ” + @strOrder + ‘) as tblTmp)’+ @strOrder if @strWhere != ” set
    @strSQL = ‘select top ‘ + str(@PageSize) +’ ‘+@strGetFields+ ‘ from ‘+
    @tblName + ‘ where ‘ + @fldName + ‘ ‘ + @strTmp + ‘ (‘+ @fldName_t + ‘)
    from (select top ‘ + str((@PageIndex-1)*@PageSize) + ‘ ‘+ @fldName + ‘
    from ‘ + @tblName + ‘ where ‘ + @strWhere + ‘ ‘+ @strOrder + ‘) as
    tblTmp) and ‘ + @strWhere + ‘ ‘ + @strOrder end end exec (@strSQL) go

–测试 create table news –建表 ( n_id int iDENTITY(1,1) primary key,
n_title char(200), n_content text )

–写循环插入1000000条的数据 create proc tt as declare @i int set @i=0
while(@i1000000) begin insert into news(n_title,n_content)
values(‘sb’,’dsfsdfsd’) set @i=@i+1 end exec tt

exec pagination ‘news’,’*’,’n_澳门金沙vip,id’,1000,2,0,0,”

MSSQL分页存储过程,支持连接查询等复杂的查询