您的位置:首页 > 其它

新闻发布用到的存储过程和触发器

2011-07-15 20:58 274 查看
--作者  尐肥羊
--2011-07-15
--
--注意的问题
--1.select的时候出现聚会函数的话,要用到group by
--2.values 注意要加上s

-- 没有外键约束的情况下
create trigger trigCategoryDelete
on category
after delete
-- after 针对的是先进行category删除之后才执行的,如果有外键约束的话.
-- 可以用instead of
as
begin
delete news where caId=(select * from deleted)
--删除出错有外键约束
end

go

--改成用instead of代替delete的操作
--先删除新闻表,再删除类别表
create trigger trigCategoryDelete
on category
instead of delete

as
begin
declare @caid int
select @caid=id from deleted
--删除评论
delete comment where newsId=(select newsId from news where caId=@caId)
--删除新闻
delete news where caId=@caId
--删除类别
delete  category where id=@caId
end

go

--存储过程取出最新10条新闻(所属类别,新闻标题,发布时间)

create procedure news_selectNew
as
begin
select top 8 n.id,n.title,n.createTime,c.name from news n
inner join  category c on n.caId=c.id
order by n.createTime desc
end
go

--取出10热点新闻(评论最多的新闻)

create procedure news_selectHot
as
begin
select top 10 n.id,n.title,n.createTime,c.[name],count(com.id) as 评论数
from news n
inner join  category c on c.id=n.caId
inner join comment com on com.newsid=n.id
group by n.id,n.title,n.createTime,c.[name]
order by 评论数 desc
end
go

--根据类别id取出类别下的所有新闻
create procedure news_selectByCaid
@caId int
as
begin
select n.id,n.title,n.createTime,c.[name] from news n
inner join  category c on c.id=n.caId
where n.caId=caId
order by n.createTime desc
end

go

exec news_selectByCaid 10  --执行类别编号为10的

--根据id显示新闻
create procedure news_selectById
@id int
as
begin
select title,[content],createTime,caId from news where id=@id
end
go

exec news_selectById 4

--根据标题搜索新闻
create procedure news_selectByTitle
@title varchar(100)
as
begin
select n.id,n.title,n.createTime,c.[name] from news n
inner join  category c on c.id=n.caId
where n.title like '%' +@title+ '%'
order by n.createTime desc
end

go

exec news_selectByTitle 's'

--根据内容搜索新闻

create procedure news_selectByContent
@content varchar(1000)
as
begin
select n.id,n.title,n.createTime,c.[name] from news n
inner join  category c on c.id=n.caId
where n.content like '%' +@content+ '%'
order by n.createTime desc
end
go

--添加新闻
create procedure news_insert
@title varchar(100),
@content text,
@caid int
as
begin
insert into news(title,[content],caid)
values(@title,@content,@caid)
end
go

exec news_insert 'ttt', 'ttt' , 10

--更新新闻
create procedure news_update
@title varchar(100),
@content text,
@caid int,
@id int
as
begin
update news
set title=@title,[content]=@content,caid=@caid
where id=@id
end
go

--删除新闻, 连同评论

create procedure news_delete
@id int
as
begin
--先删除新闻下的新闻评论
delete comment where newsId=@id
--在删除新闻
delete news where id=@id
end
go

exec news_delete 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: