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