标准答案:
在最新的SQL2005中的存储过程(Procere)类似于java语言中的方法,它是SQL语句和控制流语句的预编译集合。存储过程在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量,逻辑控制语句以及其他强大的编程功能。
存储过程可包含逻辑控制语句和数据操作语句,它可以接收参数,输出参数,返回单个或多个结果集以及返回值。
给你一个例子:
create proc proc_takeMoney
@cardID1 varchar(20), --汇款账号
@pwd int , --汇款密码
@takeMoney money, --汇款金额
@cardID2 varchar(20) --存款账号
as
set nocount on
declare @err int
set @err = 0
if exists(select 1 from cardInfo where cardID = @cardID1 and pass = @pwd)
begin
begin tran --事物开始
update cardInfo set balance = balance + @takeMoney where cardID = @cardID2 --接受款帐户加上@takeMoney
set @err = @err + @@error
update cardInfo set balance = balance - @takeMoney where cardID = @cardID1 --汇款帐户减去@takeMoney
set @err = @err + @@error
/*--交易信息表插入交易信息--*/
insert into transInfo(transDate,cardId,transType,transMoney) values(default,@cardID1,'支取',@takeMoney)
set @err = @err + @@error
insert into transInfo(transDate,cardId,transType,transMoney) values(default,@cardID2,'存入',@takeMoney)
set @err = @err + @@error
/*--交易信息--*/
select top 2 * from transInfo order by transDate desc
if(@err<>0)
begin
rollback tran --错误回滚事物
end
else
begin
commit tran --无错误提交事物
end
end --if结束
else
begin
print '密码错误'
end
/*--调用存储过程--*/
declare @cardID1 varchar(20),@cardID2 varchar(20),@pwd int ,@takeMoney money
set @cardID1 ='1010 3576 1234 5678' --张三卡号
set @pwd = 888888 --张三密码
set @cardID2 ='1010 3576 1212 1134' --李四卡号
set @takeMoney =20 --汇款金额
exec proc_takeMoney @cardID1 ,@pwd,@takeMoney,@cardID2
Ⅱ sql存储过程解释
CREATE PROCEDURE dbo.AddOrder
创建存储过程AddOrder
/*
(
@parameter1 int = 5,
---参数1,int类型,默认值是5
@parameter2 datatype OUTPUT
---参数2,datatype类型,用于返回结果
)
*/(
---上面两个参数被注释掉了,也就是没有用了。
@UserID int,
---参数 UserID,int类型
@CartIDString nvarchar(50),
---参数CartIDString,string类型
@OrderDate datetime,
---参数 OrderDate datetime类型
@OrderID int output)
---参数 OrderID,int类型,用于接收输出值
AS
---开始存储过程主体
begin tran OrderAdd
---开始事务处理
insert into Orders -------
( |
UserID, |
OrderDate) |
values |
(@UserID, |
@OrderDate) ------------- 到这里是插如一条数据到Orders表
select
@OrderID=@@Identity ------给OrderID赋值
insert into OrderContent -----开始插入数据到OrderContent表
(OrderID,
BookID,
BookQuantity,
UnitCost) -------设定要插入的4个字段
select @OrderID,
ShopCart.BookID,
bookquantity,
books.bookprice ------设定要选择的4个字段
from
shopcart ------结合shopcart和books进行条件查询
inner join books on shopcart.bookid=books.bookid
where
cartidstring=@cartidstring ----插入语句到此结束
exec emptyshoppingcart @cartidstring ---此处应该是执行了另外一个存储过程
commit tran orderadd ---- 事务处理结束。
注:此存储过程并不复杂,有难度的地方在第一条插入语句嵌套了使用了inner join的选择语句。
Ⅲ 高分求助SQL存储过程详细分析,最好每句解释一下
ALTER procere [dbo].[wvsp_updateTaskStatus]
@ttype int,
@id int,
@status int // 这一段主要是定义存储过程需要的参数
as
begin 开始存储过程
if @ttype=0 // 开始判断 如果传进来的@ttype=0
begin //开始执行
if (@status=3) //如果(@status=3)
begin //开始执行函数
insert into tb_queuelog([type],mid,code,otherparams,created) //往表名为tb_queuelog的表插入数据,以上为要插入的字段
select @ttype,mid,code,otherparams,created
from tb_mergequeue
where id=@id //要插入字段的数据从表tb_mergequeue 搜索出来,与上表要插入的字段一一对应,搜索条件为:id=@id
delete from tb_mergequeue
where id=@id //删除tb_mergequeue表中where id=@id的字段
end //结束@status=3条件循环
else//如果(@status不等于3,进入另一个方法
update tb_mergequeue
set status=@status
where id=@id //更新tb_mergequeue的数据
end //结束(@status不等于3的条件循环
else if(@ttype=1) //如果 (@ttype=1 -- 页面同步任务
begin开始
if (@status=3)
begin
insert into tb_queuelog([type],mid,code,otherparams,created)
select @ttype,mid,code,otherparams,created
from tb_syncqueue
where id=@id
delete from tb_syncqueue
where id=@id
end
else
update tb_syncqueue
set status=@status
where id=@id
end
select @@rowcount //取得记录总数
end 结束存储过程
Ⅳ 什么是SQL的存储过程
sql存储过程说简单点就是一个在t-sql下用户可以自行定义的函数,
但是与一般的函数也有不同的地方,比如它的返回值只能return(int类型),如果你要输出什么信息的话只能用output.这也是存储过程的一个特色吧,设定的参数可以有输出。讲起来有点抽象,给你个例子看看吧!
首先创建一个存储过程
create
procere
cunchuguocheng
@a
int,
@b
int,
@c
int
output
as
begin
select
@c
=
@a+@b
return(0)
end
然后调用这个存储过程
declare
@value
int,
--返回值
@c
int
--结果值
exec
@value
=
cunchuguocheng
2,2,@c
output
select
@value
as
返回值
select
@c
as
结果值
程序写的很简单,你运行一下我想你就会对存储过程有所了解了。
Ⅳ SQL存储过程解释
Create proc [dbo].proc_get_transfermobile(@starttime varchar(50),@endtime varchar(50),@tel varchar(20)) //这是建立SP的语法,三个参数 varchar(50) 这种为参数类型
as
begin
declare @sql varchar(2000); -- 申明一个变量,作为拼SQL用
declare @sqlcon varchar(500);-- 申明一个变量,作为拼SQL用set @sql=''
set @sqlcon=''--设初值
if len(@tel)>0判断电话这个参数长度是不是>0
begin
--拼条件 A.TS_TRANSFER_NUM='''+@tel
set @sqlcon =isnull(@sqlcon,'')+ ' and (A.TS_TRANSFER_NUM='''+@tel+''') '
end
--开始时间不为空,则拼上条件
if len(@starttime)>0
begin
set @sqlcon =isnull(@sqlcon,'')+ ' and (A.TS_BEGIN_TIME>='''+@starttime+''') '
end
--结束时间不为空,则拼上条件if len(@endtime)>0
begin
set @sqlcon =isnull(@sqlcon,'')+ ' and (A.TS_BEGIN_TIME<='''+@endtime+''') '
end
-- 拼SQL select
set @sql=' SELECT * FROM TS_CALL_LOG AS A INNER JOIN ( SELECT MAX(TS_SEQUENCE) AS TS_SEQUENCE ,MAX(TS_BEGIN_TIME) AS TS_BEGIN_TIME,TS_LOG_ID FROM TS_CALL_LOG GROUP BY TS_LOG_ID ) AS B ON (A.TS_LOG_ID = B.TS_LOG_ID AND A.TS_BEGIN_TIME = B.TS_BEGIN_TIME AND A.TS_SEQUENCE = B.TS_SEQUENCE) WHERE LEN(A.TS_TRANSFER_NUM) >= 11'
--拼完整语句
set @sql=@sql+@sqlcon
--动态调用上面的SQL
exec (@sql)
end
GO
Ⅵ 给我这2段sql存储过程加注解
第一段的意思是删除 dbo.[userinfo] 表的所有数据,如果出错,就回滚,取消前面的操作
第二段的意思是从根据输入的UserID 的值 从dbo.[userinfo] 表查询 对应的username ,如果 UserID 为空 则返回 空值,否则返回对应的 username 值
@开头的变量名称表示局部变量,和c语言的局部变量一样,仅在文件内有用,@@error是全局环境变量,在整个数据库系统中有用,当为0时,表示没出现错误,所以第一段的意思就是删除所有数据的时候,如果出错了,就回滚,取消所有操作,不出错的话就全部删除
建议楼主去看些t-sql方面的入门语法书,语法熟悉的情况下,这2段代码很容易看懂
Ⅶ sql server中怎样用代码创建存储过程
打开SQL server management studio,连接到数据库,展开想要创建的数据库,找到【可编程性】->【存储过程】的菜单
Ⅷ sql中的存储过程set是什么意思
SQL 语句里Update...........set连用是用于修改表中的数据,set是将新值更新到指定列中。
Update 语句用于修改表中的数据。
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
例如下句是更新某一行中的一个列,为 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
WHERE子句设置查询条件,过滤掉不需要的数据行。
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。