zoukankan      html  css  js  c++  java
  • Sql Server 常用方法、存储过程备用

    常用方法


    
      --字符串转换成数字
      --CAST("1" AS int)
      --CONVERT(int,"1")
    
      --截取字符串 
       SUBSTRING(OccurreAddress,0,7)
    
      --拼接字符串,数字和数字字符相加,会按照数字相加
        select 'str'+'11'--str11
        select '2'+1 --3
        select 2+CONVERT(nvarchar(max),2)--4
        select '2'+CONVERT(nvarchar(max),2)--22
        select 'str'+'11'--str11
        select '22'+'11' --2211
    
    
    --时间相关
    Year(getdate()) --当前年
    Month(getdate()) --当前月
    Day(getdate()) --当前日
    select getdate() --2016-04-11 17:36:07.950
    select SUBSTRING('2015rr05',5,2)--rr
    select getdate()
    select Month(getdate())
    Datediff(d,时间字段,getdate()) --得到离过现在还剩的天数
    select Datediff(DAY,2015-12-01,getdate()) --第2个开始 第3个结束
    select CONVERT(Datetime,'20151201')--2015-12-01 00:00:00.000
    select CONVERT(Datetime,'2015-12-01')--2015-12-01 00:00:00.000
    
    --select @a=count(1) from tb   此处查询语句中不能@a+=
    --我设置一个临时@temp, select @temp=count(1) from tb1 
    --然后先@a=@temp
    --我设置一个临时@temp, select @temp=count(1) from tb2 
    --然后先@a+=','+@temp
    --这个临时变量一直变
    declare @temp int
    declare @b nvarchar(max)
    
    set @temp=1;
    set @b=CONVERT(nvarchar(max), @temp )
    select @b--1
    set @temp=2;
    set @b+=','+CONVERT(nvarchar(max), @temp )
    select @b--12
    
    --以上代码需要转换类型
    --其实我们查询数量的并赋值给@temp的时候,是int
    --我们在上面直接声明declare @temp nvarchar(max),就不需要再转了。
    
    
    

    代码1 存储过程循环+=


    
    USE [ISFTCMOPSSystem]
    GO
    /****** Object:  StoredProcedure [dbo].[SelectEventCount]    Script Date: 04/19/2016 10:47:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    --重特大案件SeriousCase
    --矛盾纠纷案件 DisputesCase
    --师生安全案件 StudentSafetyCase
    --护路护线案件 RoadLineProtectiveCase
     
     
     ALTER PROCEDURE [dbo].[SelectEventCount]
    
      @DistrictCode varchar(max),  --传入
      @SC NVARCHAR(max) output,
      @DC NVARCHAR(max) output, 
      @SSC NVARCHAR(max) output,
      @RPC NVARCHAR(max) output
     as
     
    --重特大案件SC
    declare @str1 nvarchar(max)
    
    declare @RecentMonthCount INT
    SET @RecentMonthCount = 0
    
    while (@RecentMonthCount <12)
    	begin
    		select @str1= COUNT(1) from ISFTCMOPSSystem.dbo.Info_SeriousCase where 
    		SUBSTRING(OccurreAddress,0,7)=@DistrictCode 
    		and Datediff(MONTH,CONVERT(Datetime,OccurreDate),getdate())=@RecentMonthCount
    		IF @RecentMonthCount = 0
    		begin
    			if @str1 ='0'
    				set @SC='0'
    			else
    				set @SC=@str1
    		end
    		else
    		    if @str1 ='0'
    			set @SC = @SC +',0'
    			else
    			set @SC = @SC +','+@str1
    			
    		select @str1= COUNT(1) from ISFTCMOPSSystem.dbo.Info_DisputesCase where 
    		SUBSTRING(PerIdNumber,0,7)=@DistrictCode 
    		and Datediff(MONTH,CONVERT(Datetime,OccurDate),getdate())=@RecentMonthCount
    		IF @RecentMonthCount = 0
    		begin
    		if @str1 ='0'
    				set @DC='0'
    			else
    				set @DC=@str1
    		end
    		else
    		if @str1 ='0'
    			set @DC = @DC +',0'
    			else
    			set @DC = @DC +','+@str1
    			
    			select @str1= COUNT(1) from ISFTCMOPSSystem.dbo.Info_StudentSafetyCase where 
    		SUBSTRING(PrinIdNumber,0,7)=@DistrictCode 
    		and Datediff(MONTH,CONVERT(Datetime,OccDate),getdate())=@RecentMonthCount
    		IF @RecentMonthCount = 0
    		begin
    			if @str1 ='0'
    				set @SSC='0'
    			else
    				set @SSC=@str1
    		end
    		else
    		if @str1 ='0'
    			set @SSC = @SSC +',0'
    			else
    			set @SSC = @SSC +','+@str1
    			
    			select @str1= COUNT(1) from ISFTCMOPSSystem.dbo.Info_RoadLineProtectiveCase where 
    		SUBSTRING(PrinIdNumber,0,7)=@DistrictCode 
    		and Datediff(MONTH,CONVERT(Datetime,OccDate),getdate())=@RecentMonthCount
    		IF @RecentMonthCount = 0
    		begin
    		if @str1 ='0'
    				set @RPC='0'
    			else
    				set @RPC=@str1
    			
    		end
    		else
    			if @str1 ='0'
    			set @RPC = @RPC +',0'
    			else
    			set @RPC = @RPC +','+@str1
    			
    		set @RecentMonthCount = @RecentMonthCount + 1
    	end
    --矛盾纠纷案件DC
    SET @RecentMonthCount = 0
    
    
    --------------------------------------------------------------------------------
    
     --重特大案件SC
      --select @DC=COUNT(1) from   ISFTCMOPSSystem.dbo.Info_DisputesCase where SUBSTRING(PerIdNumber,0,7)=@DistrictCode
      --select @SSC=COUNT(1) from   ISFTCMOPSSystem.dbo.Info_StudentSafetyCase where SUBSTRING(PrinIdNumber,0,7)=@DistrictCode
      --select @RPC=COUNT(1) from   ISFTCMOPSSystem.dbo.Info_RoadLineProtectiveCase where SUBSTRING(PrinIdNumber,0,7)=@DistrictCode
      
    

    代码 例子2


    ALTER proc [dbo].[SelectSpecialEventCount]
     @name nvarchar(100),
     @arraySting nvarchar(max) output--因为数据库中没有数组类型,将查询多个表的值,组装成一个字符串,输出类型。
     as
     
    --重特大案件SeriousCase
    --命案防控 MurderPrevention
    --矛盾纠纷案件 DisputesCase
    --师生安全案件 StudentSafetyCase
    --护路护线案件 RoadLineProtectiveCase
     declare @temp int
     set @temp=0
    
     select @temp= COUNT(1) from ISFTCMOPSSystem.dbo.Info_SeriousCase where CaseName= 'd'
     if @temp = 0
     begin 
     set @arraySting='0' --第一,=以后+=
     end
     else
     begin
      set @arraySting=CONVERT(nvarchar(100),@temp)--第一,=以后+=
     end
     
    
     select @temp= COUNT(1) from ISFTCMOPSSystem.dbo.Info_MurderPrevention where CaseName= @name
     if @temp=0
     begin 
     set @arraySting+=',0'
     end
     else
     begin
      set @arraySting+=','+CONVERT(nvarchar(100),@temp)
     end
     
     
     select @temp+= COUNT(1) from ISFTCMOPSSystem.dbo.Info_DisputesCase where CaseName= @name
     if(@temp=0)
     begin 
     set @arraySting+=',0'
     end
     else
     begin
      set @arraySting+=','+CONVERT(nvarchar(100),@temp)
     end
     
     select @temp+= COUNT(1) from ISFTCMOPSSystem.dbo.Info_StudentSafetyCase where CaseName= @name
     if(@temp=0)
     begin 
     set @arraySting+=',0'
     end
     else
     begin
      set @arraySting+=','+CONVERT(nvarchar(100),@temp)
     end
     
     select @temp+= COUNT(1) from ISFTCMOPSSystem.dbo.Info_RoadLineProtectiveCase where CaseName= @name
     if(@temp=0)
     begin 
     set @arraySting+=',0'
     end
     else
     begin
      set @arraySting+=','+CONVERT(nvarchar(100),@temp)
     end
     
     --调试 
      --declare @a nvarchar(max)
     --exec SelectSpecialEventCount 'd',@a output --调用存储过程  参数外不带()
     --print @a
     --结果50,0,0,0,0
     
    

    分页存储过程


    USE [ISFTCMOPSSystem]
    GO
    /****** Object:  StoredProcedure [dbo].[selectEventUnion]    Script Date: 04/18/2016 16:01:08 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[selectEventUnion]
    @name nvarchar(max),
    @PageIndex int,  --逗号
    @PageSize int,
    @PageCount int output
    as
    declare @Count int;
    select @Count=count(1)FROM (
    		select '重特大案件' as title ,CaseName,SeriousCaseID as Id,'Info_SeriousCase' as tableName from dbo.Info_SeriousCase where CaseName like '%'+@name+'%'
    		union all   
    		select '命案防控' as title ,CaseName,PreventionID as Id,'Info_MurderPrevention' as tableName  from dbo.Info_MurderPrevention where CaseName like '%'+@name+'%'
    		union all   
    		select '矛盾纠纷案件' as title ,CaseName,DCaseID as Id,'Info_DisputesCase' as tableName  from dbo.Info_DisputesCase where CaseName like '%'+@name+'%'
    		union all   
    		select '师生安全案件' as title ,CaseName,SSCaseID as Id ,'Info_StudentSafetyCase' as tableName from dbo.Info_StudentSafetyCase where CaseName like '%'+@name+'%'
    		union all   
    		select '护路护线案件' as title ,CaseName,PropeCaseID as Id ,'Info_RoadLineProtectiveCase' as tableName from dbo.Info_RoadLineProtectiveCase where CaseName like '%'+@name+'%'
    		) as tableUnion;
    select @PageCount=ceiling(@Count*1.0/@PageSize);
    
    select title,CaseName,Id,tableName from
    	(select row_number() over (order by tableUnion.Id) as indexNumber, title,CaseName,Id,tableName from
    		(
    		select '重特大案件' as title ,CaseName,SeriousCaseID as Id,'Info_SeriousCase' as tableName from dbo.Info_SeriousCase where CaseName like '%'+@name+'%'
    		union all   
    		select '命案防控' as title ,CaseName,PreventionID as Id,'Info_MurderPrevention' as tableName  from dbo.Info_MurderPrevention where CaseName like '%'+@name+'%'
    		union all   
    		select '矛盾纠纷案件' as title ,CaseName,DCaseID as Id,'Info_DisputesCase' as tableName  from dbo.Info_DisputesCase where CaseName like '%'+@name+'%'
    		union all   
    		select '师生安全案件' as title ,CaseName,SSCaseID as Id ,'Info_StudentSafetyCase' as tableName from dbo.Info_StudentSafetyCase where CaseName like '%'+@name+'%'
    		union all   
    		select '护路护线案件' as title ,CaseName,PropeCaseID as Id ,'Info_RoadLineProtectiveCase' as tableName from dbo.Info_RoadLineProtectiveCase where CaseName like '%'+@name+'%'
    		) as tableUnion
        )as tableUnionLast
    where indexNumber between (@PageIndex-1)*@PageSize+1 and @PageIndex*@PageSize;
    
  • 相关阅读:
    大数板子
    数位dp
    BM算法
    牛客小白月赛7
    划分树
    可持久化线段树
    素数
    一些数学公式
    线性基
    ConcurrentHashMap 并发HashMap原理分析
  • 原文地址:https://www.cnblogs.com/leee/p/5383003.html
Copyright © 2011-2022 走看看