① 怎么创建存储过程在哪里创建
是什么数据库啊,我给你个sql SERVER的吧
/*---------------------- 练习二 -------------------------*/
use bbsDB
go
if exists(select * from sysobjects where name='proc_find1')
drop procere proc_find1
go
create procere proc_find1
@userName varchar(10)
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
if exists(select * from bbsTopic where TuID=@userID)
begin
print @userName+'发表的主帖如下:'
select 发帖时间=convert(varchar(10),Ttime,111),点击率=TclickCount,
主题=Ttopic,内容=Tcontents from bbsTopic where TuID=@userID
end
else
print @userName+'没有发表过主帖。'
if exists(select * from bbsReply where RuID=@userID)
begin
print @userName+'发表的回帖如下:'
select 回帖时间=convert(varchar(10),Rtime,111),点击率=RclickCount,
回帖内容=Rcontents from bbsReply where RuID=@userID
end
else
print @userName+'没有发表过回帖。'
go
exec proc_find1 '可卡因'
/*---------------------- 练习三 -------------------------*/
if exists(select * from sysobjects where name='proc_find2')
drop procere proc_find2
go
create procere proc_find2
@userName varchar(10),
@sumTopic int output,
@sumReply int output
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
print @userName+'发表的主帖如下:'
select 发帖时间=convert(varchar(10),Ttime,111),点击率=TclickCount,
主题=Ttopic,内容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'没有发表过主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
print @userName+'发表的回帖如下:'
select 回帖时间=convert(varchar(10),Rtime,111),点击率=RclickCount,
回帖内容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'没有发表过回帖。'
end
go
declare @sum1 int, @sum2 int
exec proc_find2 '可卡因',@sum1 output,@sum2 output
if @sum1>@sum2
print '小弟发帖比回帖多,看来比较喜欢标新立异!'
else
print '小弟回帖比发帖多,看来比较关心民众疾苦!'
print '总帖数:'+convert(varchar(5), @sum1+@sum2)
go
/*---------------------- 练习题一 -------------------------*/
if exists(select * from sysobjects where name='proc_find3')
drop procere proc_find3
go
create procere proc_find3
@userName varchar(10),
@sumTopic int output,
@sumReply int output,
@secName varchar(15)=''
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
--版块名称为空
if (@secName='')
begin
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
print @userName+'发表的主帖数为:'+convert(varchar(5),@sumTopic)+' , 内容如下:'
select 发帖时间=convert(varchar(10),Ttime,111),点击率=TclickCount,
主题=Ttopic,内容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'没有发表过主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
print @userName+'发表的回帖数量为:'+convert(varchar(5),@sumReply)+' , 内容如下:'
select 回帖时间=convert(varchar(10),Rtime,111),点击率=RclickCount,
回帖内容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'没有发表过回帖。'
end
end
--版块名称不为空
else
begin
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
and TsID=(select SID from bbsSection where Sname like @secName)
print @userName+'曾在 '+@secName+' 版块发表的主帖数量为:'+convert(varchar(5),@sumTopic)+' , 内容如下:'
select 发帖时间=convert(varchar(10),Ttime,111),点击率=TclickCount,
版块名称=@secName,主题=Ttopic,内容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'没有发表过主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
and RsID=(select SID from bbsSection where Sname like @secName)
print @userName+'曾在 '+@secName+' 版块发表的回帖数量为:'+convert(varchar(5),@sumReply)+' , 内容如下:'
select 回帖时间=convert(varchar(10),Rtime,111),点击率=RclickCount,
版块名称=@secName,回帖内容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'没有发表过回帖。'
end
end
go
declare @sum1 int, @sum2 int
exec proc_find3 '可卡因',@sum1 output,@sum2 output,'.NET技术'
if @sum1>@sum2
print '小弟发帖比回帖多,看来比较喜欢标新立异!'
else
print '小弟回帖比发帖多,看来比较关心民众疾苦!'
print '总帖数:'+convert(varchar(5), @sum1+@sum2)
go
/*---------------------- 练习题二 -------------------------*/
/*---------------------- 作业题 -------------------------*/
use bbsDB
go
if exists(select * from sysobjects where name='proc_delive')
drop procere proc_delive
go
create procere proc_delive
@userName varchar(10),
@sectionName varchar(20),
@topic varchar(20),
@contents varchar(20),
@face int
as
set nocount on
declare @userID varchar(10),@sectionID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
select @sectionID=SID from bbsSection where Sname like @sectionName
print @userName+'发帖前的状态如下:'
select * from bbsUsers where UID=@userID
insert into bbsTopic(TsID,TuID,Ttopic,Tcontents,Tface)
values(@sectionID,@userID,@topic,@contents,@face)
print @userName+'发帖如下:'
select * from bbsTopic where TID=@@identity
update bbsSection set StopicCount=StopicCount+1 where SID=@sectionID
if not exists(select * from bbsTopic where Ttopic like @topic and TuID=@userID)
update bbsUsers set Upoint=Upoint+100 where UID=@userID
else
update bbsUsers set Upoint=Upoint+50 where UID=@userID
update bbsUsers set Uclass=case
when Upoint <500 then 1
when Upoint between 500 and 1000 then 2
when Upoint between 1001 and 2000 then 3
when Upoint between 2001 and 4000 then 4
when Upoint between 4001 and 5000 then 5
else 6
end
where UID=@userID
print @userName+'发帖后的状态如下:'
select * from bbsUsers where UID=@userID
go
exec proc_delive '心酸果冻','.NET技术','.NET问题','请问如何使用……',3
go
② 1.创建一个存储过程,
CREATE PROCEDURE PRO_XSTJ
AS
select 系部编号,
sum(case when sex='男' then 1 else 0 end)as 男生人数,
sum(case when sex='女' then 1 else 0 end)as 女生人数
from 表名
group by 系部编号
③ 如何建立一个数据库存储过程
在有sp_updatediagrams的实例上,用sp_helptext 获取代码
然后在缺失sp_updatediagrams的实例上运行。
再用下面语句,设为系统存储过程:
<code style="font-size: 12px;"><span style="color:blue">EXEC </span><span style="color:darkred">sp_MS_Marksystemobject </span><span style="color:red">'sp_updatediagrams' </span></code>
④ 建立一个存储过程
ORACLE中
CREATE OR REPLACE PROCEDURE CHECKXSJBXX(NOA IN
varchar)
is
namea varchar(50);
agea smallint;
BEGIN
SELECT name INTO nameA FROM xsjbxx
where no='s11';
SELECT AGE INTO ageA FROM xsjbxx
where no='s11';
dbms_output.put_line('姓名:'||nameA);
dbms_output.put_line('年龄:'||ageA);
end;
/
调用:exec checkxsjbxx(noa => '学号')
⑤ sql创建存储过程
如果不需要带参数,则
create proc proc_name
as
begin
update a set a.dept_id=b.dept_id
from employees a,departments b
where b.dept_name='经理办公室'
and (工作年份大于六年)
end
工作年份大于6年不知道你这里要怎么写,如果是有一个入职时间的字段T,
就是datediff(year,a.T,getdate())>6
⑥ 如何创建SQL存储过程
步骤如下:
在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。
展开“数据库”、sql server存储过程所属的数据库以及“可编程性”。
右键单击“存储过程”,再单击“新建存储过程”。
在“查询”菜单上,单击“指定模板参数的值”。
在“指定模板参数的值”对话框中,“值”列包含参数的建议值。接受这些值或将其替换为新值,再单击“确定”。
在查询编辑器中,使用过程语句替换 SELECT 语句。
若要测试语法,请在“查询”菜单上,单击“分析”。
若要创建sql server存储过程,请在“查询”菜单上,单击“执行”。
若要保存脚本,请在“文件”菜单上,单击“保存”。接受该文件名或将其替换为新的名称,再单击“保存”。
⑦ 创建一个存储过程
--如下,可直接复制到SQLServer的查询中执行use master
go
--创建数据库
if(db_id('studentDB')) is not null
drop database [studentDB]
create database [studentDB]
go
use [studentDB]
go
--创建学生表
create table [student]
(
[studentId] int identity(1,1) primary key,
[stuName] varchar(50) not null
)
gouse [studentDB]
go
--创建成绩表
create table [score]
(
[studentId] int not null,
[subjectName] varchar(50) not null,
[score] int
)
go
--添加外键约束
--学生ID
alter table [score]
add constraint FK_score_student
foreign key([studentId])
references [student] ([studentId])
go
--插入测试数据
insert [student]
select '张三' union
select '李四' union
select '王五' union
select '高六' union
select '赵七'
goinsert [score]
select 1,'语文',50 union
select 1,'数学',51 union
select 1,'英语',52 union
select 2,'语文',60 union
select 2,'数学',61 union
select 2,'英语',62 union
select 3,'语文',70 union
select 3,'数学',71 union
select 3,'英语',72 union
select 4,'数学',null union
select 4,'语文',100 union
select 4,'英语',null
go
use [studentDB]
go
--创建返回学生选课情况的存储过程
alter procere [pro_GetStudentScore]
@subjectName varchar(50)
as
select stu.[studentId],stu.[stuName],isnull(sco.[subjectName],'该生没选择任何课程') [课程],isnull(convert(varchar(50),sco.[score]),'成绩表中没有这门课的成绩') [成绩]
from [student] stu left join [score] sco on(stu.[studentId]=sco.[studentId])
where sco.[subjectName]=@subjectName
go
--exec [pro_GetStudentScore] '英语'
--select * from score
⑧ 如何编写存储过程
//创建存储过程
CREATE PROCEDURE userData(
IN id INT
)
BEGIN
SELECT * from userdata WHERE userflag = id;
END;
其中IN是传进去的变量;
drop procere userData;//销毁这个存储过程。
call userData(2) //调用存储过程。
(8)创建一个存储过程扩展阅读:
sql中的存储过程及相关介绍:
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数
(SQL Server 7.0以上版本),参数的使用方法如下:
@参数名数据类型[VARYING] [=内定值] [OUTPUT]。
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。
[内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数。
同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。
参考资料来源:网络-储存过程