標准答案:
在最新的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,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。