createproc[dbo].[PageList](@PageIndexint,@PageSizeint,@TableNamevarchar(200),@CoumnNamevarchar(500),@Wherevarchar(500),@OrderByvarchar(500),@Countintout)asdeclare@sql nvarchar(2000)set@sql=' select '+@CoumnName+' from (select '+@CoumnName+' ,row_number() over(order by '+@OrderBy+' ) as number from '+@TableName+' where '+@Where+' ) t where t.number between '+ Cast(((@PageIndex-1)*@PageSize+1)asvarchar(200))+' and '+
Cast((@PageIndex*@PageSize)asvarchar(200));print@sql;exec(@sql);set@sql='select count(*) from '+@TableName+' where '+@Where;print@sql;exec sp_executesql @sql,N'@total int out',@total=@Count output
EXECUTE PageList 1,5,'dbo.AdminInfo','*','','AdminId',0
11.写一个触发器sql
createtrigger Admin on[AdminUser]
instead ofdeleteasbegindeclare@idintselect@id=Id from deleted
deletefrom[Role]where Id=@iddeletefrom[AdminUser]where RId=@idend
go
deletefrom[Role]where Id=1
12.写一个存储过程包含事务的sql
createproc[dbo].[Proc_InsertRole]@RoldName nvarchar(50),@RoldRemarkvarchar(200),@RoldCreateTimedatetimeasbeginset nocount on--on表示不返回计数set xact_abort on--当执行事务时,如果出错,会将transcation设置为uncommittable状态begin try
declare@stuCountByNameint;select@stuCountByName=count(*)from Role where Name=@RoldName;if(isnull(@RoldName,'')='')beginprint('名字不能为空');return;endif(@stuCountByName>0)beginprint('名字重复');returnendbegintran--开启事务insertinto Role(Name,Remark,CreateTime)values(@RoldName,@RoldRemark,@RoldCreateTime)committran--提交事务end try
begin catch
if xact_state()=-1rollbacktran;--回滚事务select ERROR_NUMBER()as ErrorNumber;select ERROR_MESSAGE()as ErrorMsg;end catch
set xact_abort off;endEXECUTE[Proc_InsertRole]'超级管理员','无','2019-5-6 12:23:34'
13.如何一次性往一张表【插入/更新】10条数据,存储过程实现。
在这里插入代码片
14.分页的实现方式?至少写3种
select*from dbo.[AdminUser]where Id between3and4
selecttop5*from(selecttop5*from(selecttop10*from dbo.[AdminUser]orderby Id )t orderby t.Id desc)s orderby s.Id asc
selecttop5*from dbo.[AdminUser]where Id notin(selecttop2 Id from dbo.[AdminUser])
15.:写一个包含连接和分组,并且根据某个字段拼接的sql
select r.Name ,STUFF((select','+a.Name from[AdminUser] a where a.RId=r.Id for xml path('')),1,1,'') children from[Role] r groupby r.Id ,r.Name
16.写一个包含having写法的sql
select a.Name,r.Name from[AdminUser] a innerjoin[Role] r on a.RId=r.Id groupby r.Id , a.Name,r.Name having r.Id=1
17.:写一个包含连接和分组,排序的sql。
select a.Name,r.Name from[AdminUser] a innerjoin[Role] r on a.RId=r.Id groupby r.Id , a.Name,r.Name orderby r.Id