通用分页存储过程,模糊查询

时间:2020-04-22 12:45来源:江苏十一选五手机版数据库
在大家做寻找的时候时一时要用到模糊查询(注:此中name1,name2,name3,name4为数据库字段State of Qatar 1.方法 复制代码 代码如下:sql="select*fromtablewhere"ifname""then sql=sql变量"name2='""'" endif ifbelong2

在大家做寻找的时候时一时要用到模糊查询 (注:此中name1,name2,name3,name4为数据库字段State of Qatar 1.方法 复制代码 代码如下:sql="select*fromtablewhere" ifname""then sql=sql&"name1='"&变量&"'" endif ifbelong1""then sql=sql&"name2='"&变量&"'" endif ifbelong2""then sql=sql&"name3='"&变量&"'" endif ifbelong3""then sql=sql&"name4='"&变量&"'" endif 2.方式(存款和储蓄进程卡塔尔(قطر‎ 复制代码 代码如下:createprocspyourname ( @name1varchar(20卡塔尔, @name2varchar(20State of Qatar, @name3varchar(20卡塔尔国, @name4varchar(20卡塔尔国, @name5varchar(20卡塔尔(قطر‎ 卡塔尔 WITHENCEnclaveYPTION as setnocounton declare@SQLvarchar(5000卡塔尔(قطر‎set@SQL='selectname1,name2,name3,name4,name5fromyourtablewhere1=1' if@name'' set@SQL=@SQL+'andname1like''%'+@name+'%''' if@belong1'' set@SQL=@SQL+'andname2like''%'+@belong1+'%''' if@belong2'' set@SQL=@SQL+'andname3like''%'+@belong2+'%''' if@belong3'' set@SQL=@SQL+'andname4like''%'+@belong3+'%''' exec(@SQLState of Qatar

应用通用分页存款和储蓄进度进展分页 /**//*

功效:获抽出售对象,依据法则 参数: @UserTypeint, @OrgIDvarchar(500卡塔尔(قطر‎, @TargetPeriodBeginnvarchar(50卡塔尔, @TargetPeriodEndnvarchar(50State of Qatar, @BranchOrgCodenvarchar(50卡塔尔(قطر‎, @BranchOrgNamenvarchar(50卡塔尔, @OrgCodenvarchar(50卡塔尔(قطر‎, @OrgNamenvarchar(50卡塔尔(قطر‎, @SalesCodenvarchar(50State of Qatar, @SalesNamenvarchar(50卡塔尔国, @CatalogCodenvarchar(50卡塔尔, @CatalogNamenvarchar(50卡塔尔国, @PageIndexint,当前要出示的页的页索引,索引从1始发,无记录时为0。 @PageSizeint,页大小 创建者:霍LissYao 创设日期:二零零五-08-11 备注: ============================================================ */ CreatePROCEDURE[dbo].[GetSalesTargetList] @UserTypeint, @OrgIDnvarchar(500), @TargetPeriodBeginnvarchar(50), @TargetPeriodEndnvarchar(50), @BranchOrgCodenvarchar(50), @BranchOrgNamenvarchar(50), @OrgCodenvarchar(50), @OrgNamenvarchar(50), @SalesCodenvarchar(50), @SalesNamenvarchar(50), @CatalogCodenvarchar(50), @CatalogNamenvarchar(50), @PageIndexint, @PageSizeint AS declare@Conditionnvarchar(2000) set@Condition='' if(@UserType1) set@Condition=@Condition+'andA.OrgIDin('+@OrgID+')' if(len(@TargetPeriodBegin)0) set@Condition=@Condition+'andA.TargetPeriod='''+@TargetPeriodBegin+'''' if(len(@TargetPeriodEnd)0) set@Condition=@Condition+'andA.TargetPeriod='''+@TargetPeriodEnd+'''' if(len(@BranchOrgCode)0) set@Condition=@Condition+'andF.OrgCodelike''%'+@BranchOrgCode+'%''' if(len(@BranchOrgName)0) set@Condition=@Condition+'andF.OrgNamelike''%'+@BranchOrgName+'%''' if(len(@OrgCode)0) set@Condition=@Condition+'andE.OrgCodelike''%'+@OrgCode+'%''' if(len(@OrgName)0) set@Condition=@Condition+'andE.OrgNamelike''%'+@OrgName+'%''' if(len(@SalesCode)0) set@Condition=@Condition+'andC.SalesCodelike''%'+@SalesCode+'%''' if(len(@SalesName)0) set@Condition=@Condition+'andC.SalesNamelike''%'+@SalesName+'%''' if(len(@CatalogCode)0) set@Condition=@Condition+'andD.CatalogCodelike''%'+@CatalogCode+'%''' if(len(@CatalogName)0) set@Condition=@Condition+'andD.CatalogNamelike''%'+@CatalogName+'%''' if(len(@Condition)0) set@Condition=substring(@Condition,5,len(@Condition)) --print@Condition execsp_Paging N'',N'''asCheckBox,A.TargetID,A.TargetPeriod,Convert(varchar(10),B.BeginDate,120)asBeginDate,Convert(varchar(10),B.EndDate,120)asEndDate, C.SalesCode,C.SalesName,D.CatalogCode,D.CatalogName,E.OrgID,E.OrgName,F.OrgIDasBranchOrgID,F.OrgCodeasBranchOrgCode,F.OrgNameasBranchOrgName,A.Amount,''asDetailButton', N'ChlSalesTargetasA leftouterjoinChlSalesTargetPeriodasBonA.TargetPeriod=B.TargetPeriod leftouterjoinChlSalesasConA.Sales=C.SalesCode leftouterjoinChlItemCatalogasDonA.ItemCatalog=D.CatalogCode leftouterjoinChlOrgasEonA.OrgID=E.OrgID leftouterjoinChlOrgasFonC.BranchOrgID=F.OrgID', @Condition, N'A.TargetPerioddesc,C.SalesName,D.CatalogName', @PageIndex,@PageSize

作品简单的介绍有关SQL Server 导出 insert into的格局有要求的相爱的人能够参见一下。 代码如下复制代码 Create PROCEDU牧马人Edbo.UspOutputData @tablename sysname AS declare @column varchar(1000卡塔尔declare @columndata varchar(1000卡塔尔 declare @sql varchar(4000卡塔尔国 declare @xtype tinyint declare @name sysname declare @objectId int declare @objectname sysname declare @ident int set nocount on set @objectId=object_id(@tablename卡塔尔 if @objectId is null -- 判??ο笫欠翊嬖?nbsp; begin print 'The object not exists' return end set @objectname=object_name(@objectId卡塔尔(قطر‎ if @objectname is null or charindex(@objectname,@tablenameState of Qatar=0 --此决断不严密 begin print 'object not in current database' return end if OBJECTPROPERTY(@objectId,'IsTable'State of Qatar 1 -- 判??ο笫欠袷?able begin print 'The object is not table' return end select @ident=status0x80 from syscolumns where id=@objectid and status0x80=0x80 if @ident is not null print 'SET IDENTITY_Insert '+@TableName+' ON' declare syscolumns_cursor cursor for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid open syscolumns_cursor set @column='' set @columndata='' fetch next from syscolumns_cursor into @name,@xtype while @@fetch_status -1 begin if @@fetch_status-2 begin if @xtype not in(189,34,35,99,98卡塔尔国--timestamp不需管理,image,text,ntext,sql_variant 一时不管理 begin set @column=@column+case when len(@column卡塔尔=0 then'' else ','end+@name set @columndata=@columndata+case when len(@columndataState of Qatar=0 then '' else ','','','end +case when @xtype in(167,175State of Qatar then '''''''''+'+@name+'+''''''''' --varchar,char when @xtype in(231,239卡塔尔(قطر‎then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar when @xtype=61 then '''''''''+convert(char(23卡塔尔(قطر‎,'+@name+',121卡塔尔(قطر‎+''''''''' --datetime when @xtype=58 then '''''''''+convert(char(16卡塔尔(قطر‎,'+@name+',120State of Qatar+''''''''' --smalldatetime when @xtype=36 then '''''''''+convert(char(36State of Qatar,'+@name+'State of Qatar+''''''''' --uniqueidentifier else @name end end end fetch next from syscolumns_cursor into @name,@xtype end close syscolumns_cursor deallocate syscolumns_cursor set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename print '--'+@sql exec(@sql) if @ident is not null print 'SET IDENTITY_Insert '+@TableName+' OFF' GO 实行办法是: exec UspOutputData 你的表名 获得导出数据的语句,但image,text,ntext,sql_variant 列不出今后言语,未来改善。

通用分页存款和储蓄进程----Sp_Paging /**//*

功效:通用分页存款和储蓄进度 参数: @PKvarchar(50State of Qatar,主键,用来排序的单一字段,空的话,表示未有主键,存款和储蓄进程将机关创设标识列主键 @Fieldsvarchar(500卡塔尔(قطر‎,要体现的字段列表(格式如:ID,Code,Name卡塔尔@Tablesvarchar(1000卡塔尔,要利用的表集合(OrgState of Qatar@Wherevarchar(500卡塔尔国,查询条件(Codelike'100'卡塔尔(قطر‎@OrderByvarchar(100卡塔尔,排序条件(扶持几个排序字段,如:ID,Codedesc,NamedescState of Qatar@PageIndexint,当前要来得的页的页索引,索引从1从头,无记录时为0。 @PageSizeint,页大小 创建者:HollisYao 创制日期:2005-08-06 备注: ============================================================ */ CreatePROCEDURE[dbo].[Sp_Paging] @PKvarchar(50卡塔尔国='', @Fieldsvarchar(500State of Qatar, @Tablesvarchar(1000卡塔尔国, @Wherevarchar(500卡塔尔国='', @OrderByvarchar(100卡塔尔(قطر‎, @PageIndexint, @PageSizeint AS --替换单引号,防止布局SQL出错 set@Fields=replace(@Fields,'''','''''')--要实施的SQL,切分为几个字符串,制止现身长度超过4k时的主题材料declare@SQL1varchar(4000卡塔尔 declare@SQL2varchar(4000卡塔尔(قطر‎ set@SQL1='' set@SQL2='' if@Whereisnotnullandlen(ltrim(rtrim(@Where卡塔尔(قطر‎State of Qatar卡塔尔国0 set@Where='where'+@Where else set@Where='where1=1' set@SQL1=@SQL1+'declare@TotalCountint'--评释一(Wissu卡塔尔(BeingmateState of Qatar个变量,总记录数 set@SQL1=@SQL1+'declare@PageCountint'--声澳优个变量,总页数 set@SQL1=@SQL1+'declare@PageIndexint'--声澳优个变量,页索引 set@SQL1=@SQL1+'declare@StartRowint'--声美赞臣个变量,当前页第一条记下的索引 set@SQL1=@SQL1+'select@TotalCount=count(*卡塔尔from'+@Tables+@Where--获取总记录数 set@SQL1=@SQL1+'if@PageCount=0begin'--若是记录数为0,直接输出空的结果集 set@SQL1=@SQL1+'select'+@Fields+'from'+@Tables+'where11' set@SQL1=@SQL1+'select0asPageIndex,0asPageCount,'+convert(varchar,@PageSize卡塔尔(قطر‎+'asPageSize,0asTotalCount' set@SQL1=@SQL1+'returnend' set@SQL1=@SQL1+'set@PageCount=(@TotalCount+'+convert(varchar,@PageSize卡塔尔(قطر‎+'-1卡塔尔/'+convert(varchar,@PageSize卡塔尔(قطر‎--获取总页数 set@SQL1=@SQL1+'set@PageIndex='+convert(varchar,@PageIndexState of Qatar--设置科学的页索引 set@SQL1=@SQL1+'if@PageIndex0set@PageIndex=1' set@SQL1=@SQL1+'if@PageIndex@PageCountand@PageCount0set@PageIndex=@PageCount' set@SQL1=@SQL1+'set@StartRow=(@PageIndex-1State of Qatar*'+convert(varchar,@PageSize)+'+1' if(charindex(',',@OrderBy)=0andcharindex(@PK,@OrderBy)0) begin --**************************************************************************** --****************不必要成立主键******************************************** --**************************************************************************** declare@SortDirectionvarchar(10State of Qatar--排序方向,=:升序,=:倒序 set@SortDirection='=' ifcharindex('desc',@OrderByState of Qatar0 set@SortDirection='=' set@SQL2=@SQL2+'declare@Sortvarchar(100卡塔尔国'--声澳优个变量,用来记录当前页第一条记下的排序字段值 set@SQL2=@SQL2+'setrowcount@StartRow'--设置重临记录数截止到当前页的第一条 set@SQL2=@SQL2+'select@Sort='+@PK+'from'+@Tables+@Where+'orderby'+@OrderBy--获取当前页第二个排序字段值 set@SQL2=@SQL2+'setrowcount'+convert(varchar,@PageSize卡塔尔--设置重回记录数为页大小 set@Where=@Where+'and'+@PK+@SortDirection+'@Sort' set@SQL2=@SQL2+'select'+@菲尔德s+'from'+@Tables+@Where+'orderby'+@OrderBy--输出最终展现结果 end else begin --**************************************************************************** --*************必要成立自增进主键****************************************** --**************************************************************************** set@SQL2=@SQL2+'declare@EndRowint' set@SQL2=@SQL2+'set@EndRow=@PageIndex*'+convert(varchar,@PageSize卡塔尔国set@SQL2=@SQL2+'setrowcount@EndRow' set@SQL2=@SQL2+'declare@PKBeginint'--声Bellamy个变量,开首索引 set@SQL2=@SQL2+'declare@PKEndint'--声爱他美(AptamilState of Qatar个变量,截至索引 set@SQL2=@SQL2+'set@PKBegin=@StartRow' set@SQL2=@SQL2+'set@PKEnd=@EndRow' --**************************************************************************** --************对新鲜字段举行转移,以便能够插入到有时表****************** --**************************************************************************** declare@TempFieldsvarchar(500卡塔尔国 set@TempFields=@Fields set@TempFields=replace(@TempFields,'''''asCheckBox','')set@TempFields=replace(@TempFields,'''''asDetailButton',''卡塔尔set@TempFields=replace(@TempFields,'''''asRadio',''卡塔尔set@Temp菲尔德s=LTSportageIM(RT传祺IM(@TempFields卡塔尔国卡塔尔ifleft(@TempFields,1卡塔尔(قطر‎=','--去除最左侧的逗号 set@TempFields=substring(@Temp菲尔德s,2,len(@TempFieldsState of Qatar)ifright(@TempFields,1卡塔尔=','--去除最左侧的逗号 set@Temp菲尔德s=substring(@TempFields,1,len(@TempFields卡塔尔国-1卡塔尔国set@SQL2=@SQL2+'selectidentity(int,1,1卡塔尔(قطر‎asPK,'+@TempFields+'into#tbfrom'+@Tables+@Where+'orderby'+@OrderBy --**************************************************************************** --********剔除字段的表名前缀,当有字段有外号时,只保留字段小名********* --**************************************************************************** declare@Total菲尔德svarchar(500State of Qatar declare@tmpvarchar(50卡塔尔(قطر‎ declare@iint declare@jint declare@iLeftint--左括号的个数 declare@iRightint--右括号的个数 set@i=0 set@j=0 set@iLeft=0 set@iRight=0 set@tmp='' set@TotalFields='' while(len(@Fields卡塔尔0State of Qatar begin set@i=charindex(',',@Fields卡塔尔国 --去除字段的表名前缀 if(@i=0卡塔尔(قطر‎ begin --找不到逗号分割,即表示只剩余最终一个字段 set@tmp=@Fields end else begin set@tmp=substring(@Fields,1,@i卡塔尔(قطر‎ end set@j=charindex('.',@tmp卡塔尔if(@j0卡塔尔(قطر‎ set@tmp=substring(@tmp,@j+1,len(@tmpState of Qatar卡塔尔--*******当有字段有别称时,只保留字段别称********* --带括号的处境要单独管理,如Convert(varchar(10卡塔尔国,B.EndDate,120State of QatarasEndDate while(charindex('(',@tmp卡塔尔国0State of Qatar begin set@iLeft=@iLeft+1 set@tmp=substring(@tmp,charindex('(',@tmp卡塔尔(قطر‎+1,Len(@tmpState of Qatar卡塔尔国 end while(charindex('卡塔尔(قطر‎',@tmp卡塔尔0卡塔尔(قطر‎ begin set@iRight=@iRight+1 set@tmp=substring(@tmp,charindex('卡塔尔(قطر‎',@tmp卡塔尔+1,Len(@tmp卡塔尔国State of Qatar end --当括号刚好组成代表队的时候,才干进行字段外号的拍卖 if(@iLeft=@iRight卡塔尔国 begin set@iLeft=0 set@iRight=0 --不对那多少个特殊字段作管理:CheckBox、DetailButton、Radio if(charindex('CheckBox',@tmpState of Qatar=0andcharindex('DetailButton',@tmpState of Qatar=0andcharindex('Radio',@tmp卡塔尔国=0State of Qatarbegin --剖断是或不是有别称if(charindex('as',@tmp卡塔尔国0)--小名的率先种写法,带'as'的格式 begin set@tmp=substring(@tmp,charindex('as',@tmpState of Qatar+2,len(@tmp卡塔尔State of Qatar end else begin if(charindex('',@tmp卡塔尔(قطر‎0卡塔尔国--别称的第三种写法,带空格(""卡塔尔的格式 begin while(charindex('',@tmp卡塔尔0卡塔尔国 begin set@tmp=substring(@tmp,charindex('',@tmp卡塔尔+1,len(@tmp卡塔尔国State of Qatar end end end end set@TotalFields=@TotalFields+@tmp end if(@i=0State of Qatar set@Fields='' else set@Fields=substring(@Fields,@i+1,len(@Fields卡塔尔卡塔尔(قطر‎ end --print@TotalFields set@SQL2=@SQL2+'select'+@TotalFields+'from#tbwherePKbetween@PKBeginand@PKEndorderbyPK'--输出最后显示结果 set@SQL2=@SQL2+'droptable#tb' end --输出“PageIndex(页索引卡塔尔国、PageCount(页数卡塔尔国、PageSize(页大小卡塔尔(قطر‎、TotalCount(总记录数卡塔尔国” set@SQL2=@SQL2+'select@PageIndexasPageIndex,@PageCountasPageCount,' +convert(varchar,@PageSizeState of Qatar+'asPageSize,@TotalCountasTotalCount' --print@SQL1+@SQL2 exec(@SQL1+@SQL2卡塔尔假若使用那么些通用分页存款和储蓄进程的话,那么调用方法如下:

空费时日未有上来写点东西了,不久前赶巧有空,分享一些民用经验,正是有关分页的囤积进程,那个难点应有是老生重谈了,网络的通用存款和储蓄进度的门类已经够多了,不过,好象见到的大半不可能满意一些长短不一的SQL语句的分页,比方上面那句: select''asCheckBox,A.TargetID,A.TargetPeriod,Convert(varchar(10卡塔尔(قطر‎,B.BeginDate,120卡塔尔asBeginDate, Convert(varchar(10卡塔尔国,B.EndDate,120卡塔尔(قطر‎asEndDate,C.SalesCode,C.SalesName,D.CatalogCode,D.CatalogName, E.OrgID,E.OrgName,F.OrgIDasBranchOrgID,F.OrgCodeasBranchOrgCode,F.OrgNameasBranchOrgName, A.Amount,''asDetailButton fromChlSalesTargetasA leftouterjoinChlSalesTargetPeriodasBonA.TargetPeriod=B.TargetPeriod leftouterjoinChlSalesasConA.Sales=C.SalesCode leftouterjoinChlItemCatalo瓦斯DonA.ItemCatalog=D.CatalogCode leftouterjoinChlOr瓦斯EonA.OrgID=E.OrgID leftouterjoinChlOr瓦斯FonC.BranchOrgID=F.OrgID whereA.TargetPeriod='200507'andA.TargetPeriod='二〇〇六08'andF.OrgCodelike'%123%'andE.OrgCodelike'%123%' orderbyA.TargetPerioddesc,C.SalesName,D.CatalogName上边那句SQL里面有一对特殊处境,举例动用了Convert函数,何况没有主键,有多表连接,有表外号,字段外号等等,这几个意况管理起来大概比较费事,当然,此中的“''asCheckBox”是自己系统在那之中的特例意况,用来做一些甩卖的。 笔者这里提供两个本身支付的通用分页存款和储蓄进度,有如何好的提商谈观点,我们请多多点拨。代码如下:

编辑:江苏十一选五手机版数据库 本文来源:通用分页存储过程,模糊查询

关键词: