MSSQL网站制作之SqlServer分批取蹬c相PID的
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。server|sqlserver1.分批取
declare@P1int
set@P1=180150000
declare@P2int
set@P2=8
declare@P3int
set@P3=1
declare@P4int
set@P4=3
execsp_cursoropen@P1output,
Nselecttop3*fromauthors,
@P2output,
@P3output,
@P4output
select@P1,@P2,@P3,@P4
go
execsp_cursorfetch180150000,16,1,1
go
execsp_cursorfetch180150000,16,2,1
go
execsp_cursorfetch180150000,16,3,1
go
execsp_cursorfetch180150000,16,4,1
go
execsp_cursorclose180150000
go
execsp_cursorfetch180150000,16,1,10--第1P起,取10P
execsp_cursorclose180150000
go
2.取相PID的
Thetable-valuedfunctionfn_FindReports(InEmpID),which--givenanEmployeeID--returnsatablecorrespondingtoalltheemployeesthatreporttothegivenemployeedirectlyorindirectly.Thislogicisnotexpressibleinasinglequeryandisagoodcandidateforimplementingasauser-definedfunction.
CREATEFUNCTIONfn_FindReports(@InEmpIdnchar(5))
RETURNS@retFindReportsTABLE(empidnchar(5)primarykey,
empnamenvarchar(50)NOTNULL,
mgridnchar(5),
titlenvarchar(30))
/*Returnsaresultsetthatlistsalltheemployeeswhoreporttogiven
employeedirectlyorindirectly.*/
AS
BEGIN
DECLARE@RowsAddedint
--tablevariabletoholdaccumulatedresults
DECLARE@reportsTABLE(empidnchar(5)primarykey,
empnamenvarchar(50)NOTNULL,
mgridnchar(5),
titlenvarchar(30),
processedtinyintdefault0)
--initialize@Reportswithdirectreportsofthegivenemployee
INSERT@reports
SELECTempid,empname,mgrid,title,0
FROMemployees
WHEREempid=@InEmpId
SET@RowsAdded=@@rowcount
--Whilenewemployeeswereaddedinthepreviousiteration
WHILE@RowsAdded>0
BEGIN
/*Markallemployeerecordswhosedirectreportsaregoingtobe
foundinthisiterationwithprocessed=1.*/
UPDATE@reports
SETprocessed=1
WHEREprocessed=0
--Insertemployeeswhoreporttoemployeesmarked1.
INSERT@reports
SELECTe.empid,e.empname,e.mgrid,e.title,0
FROMemployeese,@reportsr
WHEREe.mgrid=r.empidande.mgride.empidandr.processed=1
SET@RowsAdded=@@rowcount
/*Markallemployeerecordswhosedirectreportshavebeenfound
inthisiteration.*/
UPDATE@reports
SETprocessed=2
WHEREprocessed=1
END
--copytotheresultofthefunctiontherequiredcolumns
INSERT@retFindReports
SELECTempid,empname,mgrid,title
FROM@reports
RETURN
END
GO
对于update操作,event中依次记录旧行,新行的值。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 一个是把SQL语句写到客户端,可以使用DataSet进行加工; 备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。 可以动态传入参数,省却了动态SQL的拼写。 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
页:
[1]