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,记录上次操作影响的行数

转载于:https://www.cnblogs.com/RobotTech/archive/2007/03/01/660543.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值