SQL语句

1:写一个包含连接和分组的sql


2:写一个包含连接和case when的sql


3:写一个包含连接和Cast()函数的sql


4:写一个包含连接和Convert()函数的sql


5:写一个包含子查询的sql


6:写一个视图的sql


7:创建索引的sql


8:分页存储过程sql


9:写一个触发器sql

9:写一个触发器sql
CREATE TRRIGER MYTR1
ON A
FOR INSERT
AS
DECLARE @UserName varchar(20)
SELECT @UserName=UserName from CurrentUser
INSERT INTO C (TableName,Type,dDate,UserName) VALUES (‘A’,‘Insert’,getdate(),@UserName)
GO
10:写一个存储过程包含事务的sql
ALTER proc [dbo].[Proc_InsertStudent]
@stuName nvarchar(50),@stuClassId int,@stuAge int
as
begin
set nocount on --on表示不返回计数
set xact_abort on --当执行事务时,如果出错,会将transcation设置为uncommittable状态

begin try
declare @stuCountByName int;
select @stuCountByName=count(*) from Students where Name=@stuName;

if(isnull(@stuName,’’)=’’)
begin
print(‘名字不能为空’);
return;
end

if(@stuCountByName>0)
begin
print(‘名字重复’);
return
end

begin tran --开启事务
insert into Students(Name,ClassId,Age) values(@stuName,@stuClassId,@stuAge)
commit tran --提交事务

end try

begin catch
if xact_state()=-1
rollback tran; --回滚事务
select ERROR_NUMBER() as ErrorNumber;
select ERROR_MESSAGE() as ErrorMsg;
end catch
set xact_abort off;
end
11:如何一次性往一张表【插入/更新】10条数据,存储过程实现。
UPDATE 会员表
SET 帐户分值 = 帐户分值 + t.分值
FROM 会员表,
(
SELECT 会员ID, SUM(分值) 分值
FROM 问题表
WHERE DateDiff(day,发布时间,GetDate())>10
AND 状态 = 3
GROUP BY 会员ID
) t
WHERE 会员表.ID = t.会员ID

INSERT INTO 记录表 (UID,分数,时间)
SELECT 会员ID,分值,GetDate()
FROM (
SELECT 会员ID, SUM(分值) 分值
FROM 问题表
WHERE DateDiff(day,发布时间,GetDate())>10
AND 状态 = 3
GROUP BY 会员ID
) t

UPDATE 问题表
SET 状态 = 4
WHERE DateDiff(day,发布时间,GetDate())>10
AND 状态 = 3
12:分页的实现方式?至少写3种
第一种:使用not in,select top 方法:
select top 5 * from T_user where ID not in(select top (3-1)*5 id from T_user order by ID)

说明:select top 页大小 [要查询的字段名称] from 表名 where ID not in(select top (当前页数-1)*页大小 id from 表名 order by ID)
第二种:使用select top ,max方法:
select top 5 * from T_user where(ID>=(select MAX(id)from(select top (3-1)*5+1 ID from T_user order by ID)as t))order by ID
说明:select top 页大小 [要查询的字段名称] from 表名 where(ID>=(select Max(id)from(select top(当前页数-1)*页大小+1) ID from 表名 order by ID)as t)order by ID)
第三种:如果SQLServer是2005及以上版本,可以使用ROW_NUMBER()函数进行分页:
select * from
(
select *, row_number()over(order by id) as num from T_user
)as t where t.num between (3-1)5+1 and 35
说明:select * from(select [要查询的字段名称], row_number()over(order by id) as num from 表名 )as t where t.num between (当前页-1)页大小+1 and 当前页页大小
13:写一个包含连接和分组,并且根据某个字段拼接的sql
select id,name,sum(num) count from st group by id,name;
14:写一个包含having写法的sql
SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno;
15:写一个包含连接和分组,排序的sql。
select a,b,rank() over(partition by a order by b ) nmb from test

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值