zoukankan      html  css  js  c++  java
  • SQL 参考

    1. CURSOR
    DECLARE Role_Cursor CURSOR
        FOR
    SELECT  RoleName  FROM SYS_RRole   WHERE ID IN   (SELECT RoleID  FROM SYS_RAccountRole  WHERE AccountID = @AccountID)

     OPEN Role_Cursor
     FETCH NEXT FROM Role_Cursor INTO @RoleName

     WHILE @@FETCH_STATUS = 0
     BEGIN
      select @RoleNames = @RoleNames + @RoleName+','
      FETCH NEXT FROM Role_Cursor INTO @RoleName
     END

     CLOSE Role_Cursor
     DEALLOCATE Role_Cursor
    -------------------------------------------------------------------------------------------
    2.1 FUNCTION
    CREATE   FUNCTION [GetAreaPY] (@soke varchar(200)) 
    RETURNS nvarchar(50) AS 
    BEGIN
     declare @ReturnStr  nvarchar(50)
     set @ReturnStr = ''
     
     IF (@soke='苏州市司法局' or @soke='苏州市')
     begin
      set @ReturnStr = 'sfj'
     end
     else
     begin
      IF CHARINDEX('高新区', @soke) > 0
       set @ReturnStr = 'gx'
      IF CHARINDEX('园区', @soke) > 0
       set @ReturnStr = 'yq'
      IF CHARINDEX('沧浪', @soke) > 0
       set @ReturnStr = 'cl'
      IF CHARINDEX('平江', @soke) > 0
       set @ReturnStr = 'pj'
      IF CHARINDEX('金阊', @soke) > 0
       set @ReturnStr = 'jc'
      IF CHARINDEX('吴中', @soke) > 0
       set @ReturnStr = 'wz'
      IF CHARINDEX('相城', @soke) > 0
       set @ReturnStr = 'xc'
      IF CHARINDEX('吴江', @soke) > 0
       set @ReturnStr = 'wj'
      IF CHARINDEX('昆山', @soke) > 0
       set @ReturnStr = 'ks'
      IF CHARINDEX('常熟', @soke) > 0
       set @ReturnStr = 'cs'
      IF CHARINDEX('太仓', @soke) > 0
       set @ReturnStr = 'tc'
      IF CHARINDEX('张家港', @soke) > 0
       set @ReturnStr = 'zjg'
     end 
     return LOWER(@ReturnStr)
    END
    -------------------------------------------------------------------------------------------
    2.2 FUNCTION ('Atp Bmp Code' --> 'abc')
    CREATE   FUNCTION [GetStrByLongStr] (@str varchar(200)) 
    RETURNS nvarchar(50) AS 
    BEGIN
     set @str = REPLACE(@str,'    ',' ')
     set @str = REPLACE(@str,'   ',' ') 
     set @str = REPLACE(@str,'  ',' ')

     declare @ReturnStr  nvarchar(50)
     set @ReturnStr = ''
     
     set @ReturnStr = substring(@str,1,1)
     WHILE CHARINDEX(' ', @str) > 0
     BEGIN
         set @str = substring(@str,CHARINDEX(' ', @str)+1,len(@str))
       set @ReturnStr = @ReturnStr + substring(@str,1,1)
       
     END
     return LOWER(@ReturnStr)
    END
    -------------------------------------------------------------------------------------------
    3.1 Procedure
    CREATE procedure p_GetChildOrg
    @OrgID bigint
    as

    select * from SYS_Organization where ParentOrgID in(select OrgID from SYS_Organization where ParentOrgID in(select OrgID from SYS_Organization where ParentOrgID=@OrgID))
    union
    select * from SYS_Organization where ParentOrgID in(select OrgID from SYS_Organization where ParentOrgID=@OrgID)
    union
    select * from SYS_Organization where ParentOrgID=@OrgID
    union
    select * from SYS_Organization where OrgID=@OrgID
    GO

    -------------------------------------------------------------------------------------------
    3.2 Procedure
    create procedure SP_OrdList_ByDate
    @BYear int,
    @EYear int
    AS
    select * from dbo.Odr_List
    where Year(OdrDate)>=@BYear and Year(OdrDate)<=@EYear
    GO
    --exec SP_OrdList_ByDate 2001,2004
    -------------------------------------------------------------------------------------------
    4.1 Trigger
    create trigger track_Odr_Detail_inserts
    on dbo.Odr_Detail
    for insert
    as
    declare @price int
    declare @odrid int
    select @price=Price from Inserted
    select @odrid=OdrID from Inserted
    update dbo.Odr_List set TotalMoney=TotalMoney+@price where OdrID=@odrid
    go
    --insert into dbo.Odr_Detail values(81,'POP_8',13)
    -------------------------------------------------------------------------------------------
    4.2 Trigger
    create trigger track_Odr_Detail_updates
    on dbo.Odr_Detail
    for update
    as
    declare @new_price int --新价格
    declare @old_price int  --旧价格
    declare @odrid int
    declare @range int     --变化值
    select @new_price=Price from Inserted
    select @old_price=Price from Deleted
    select @odrid=OdrID from Inserted
    set @range=@new_price-@old_price
    update dbo.Odr_List set TotalMoney=TotalMoney+@range where OdrID=@odrid
    go

    --update Odr_Detail set Price=20 where OdrID=81
    -------------------------------------------------------------------------------------------
    6. 自身连接 (ID,姓名,级别,主管姓名)
    select a.ID,a.Name,a.Level,b.Name BossName
    from Member a left join Member b on a.BOSSID=b.ID
    -------------------------------------------------------------------------------------------

    7. identity(bigint,1,1)
    select identity(bigint,1,1) as EmpID,...
    into temptable
    from tableName1

    insert into tableName2
    select * from tableName1

    drop table temptable

    -------------------------------------------------------------------------------------------
    8.1 Function (Return table)
    CREATE TABLE Arrays
    (
      aid INT NOT NULL IDENTITY PRIMARY KEY,
      array VARCHAR(7999) NOT NULL
    )
    go
    INSERT INTO Arrays VALUES('')
    INSERT INTO Arrays VALUES('10')
    INSERT INTO Arrays VALUES('20,40,30')
    INSERT INTO Arrays VALUES('-1,-3,-5')
    GO
    CREATE FUNCTION  function1(@arr AS VARCHAR(7999))
      RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)
    AS
    BEGIN
      DECLARE @end AS INT, @start AS INT, @pos AS INT
      SELECT @arr = @arr + ',', @pos = 1,
        @start = 1, @end = CHARINDEX(',', @arr, @start)
      WHILE @end > 1
      BEGIN
        INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end - @start))

        SELECT @pos = @pos + 1,
          @start = @end + 1, @end = CHARINDEX(',', @arr, @start)
      END
      RETURN
    END
    --test
    select * from function1('200,400,300')
    go
    -------------------------------------------------------------------------------------------
    8.2 Function (Return table)
    CREATE            function   gettreenode(@eid bigint)  
      returns   @re   table(autoid bigint IDENTITY(1,1),eid  bigint,level int)  
      as  
        begin
     
     declare @l int
     set @l=0
     insert @re select @eid,@l
     while @@rowcount>0
     --全局变量@@rowcount,记录上次操作影响的行数
     begin
     set @l=@l+1
     insert @re select a.OrgID,@l from SYS_Organization as a,@re as b where a.ParentOrgID=b.eid and b.level=@l-1
     
     --循环将当前记录的直接下级插入@re
     end
     

     return
     

        end

    -------------------------------------------------------------------------------------------
    9.
    --全局变量@@rowcount,记录上次操作影响的行数

  • 相关阅读:
    Spring Boot 返回 XML 数据,一分钟搞定!
    Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现
    周末去面试,进去 5 分钟就出来了…
    Spring Boot 返回 JSON 数据,一分钟搞定!
    Java 11 已发布,String 还能这样玩!
    Hashtable 为什么不叫 HashTable?
    Java 中初始化 List 集合的 6 种方式!
    HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!
    毕业不到一年,绩效打了个D!
    poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
  • 原文地址:https://www.cnblogs.com/RobotTech/p/660543.html
Copyright © 2011-2022 走看看