sql存儲過程使用事務
1、 創建語法
createproc|procerepro_name
[{@參數數據類型}[=默認值][output],
{@參數數據類型}[=默認值][output],
....
]
as
SQL_statements
2、 創建不帶參數存儲過程
--創建存儲過程
if(exists(select*fromsys.objectswherename='proc_get_student'))
dropprocproc_get_student
go
createprocproc_get_student
as
select*fromstudent;
--調用、執行存儲過程
execproc_get_student;
3、 修改存儲過程
--修改存儲過程
alterprocproc_get_student
as
select*fromstudent;
4、 帶參存儲過程
--帶參存儲過程
if(object_id('proc_find_stu','P')isnotnull)
dropprocproc_find_stu
go
createprocproc_find_stu(@startIdint,@endIdint)
as
select*fromstudentwhereidbetween@startIdand@endId
go
execproc_find_stu2,4;
5、 帶通配符參數存儲過程
--帶通配符參數存儲過程
if(object_id('proc_findStudentByName','P')isnotnull)
dropprocproc_findStudentByName
go
createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')
as
select*fromstudentwherenamelike@nameandnamelike@nextName;
go
execproc_findStudentByName;execproc_findStudentByName'%o%','t%';
(1)sql存儲過程使用事務擴展閱讀:
SQL存儲過程優點:
1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
2. sql server中怎麼在存儲過程中使用事務
給你個地址,
自己去看吧
http://wenku..com/link?url=Y-efYbVvDugMDVbUxa-wcU_7NzX25vVNQNT3yoTUf5ZA199t__GigT3boo0jR3W7joluDV47
3. Java調用SQL存儲過程、事務
例示一個不帶參數的簡單存儲過程。多數存儲過程的功能比本例復雜多了,但這里主要說明存儲過程的一些基本要點。如前面所述,不同DBMS定義存儲過程的語法是不同的。例如,有些DBMS使用begin
.
.
.
end或其他關鍵字指明存儲過程定義的開始和結束。在有些DBMS中,下面的SQL語句可創建一個存儲過程:
create
procere
SHOW_SUPPLIERS
as
select
SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME
from
SUPPLIERS,
COFFEES
where
SUPPLIERS.SUP_ID
=
COFFEES.SUP_ID
order
by
SUP_NAME
下面的代碼將SQL語句放到一個字元串中,然後賦給變數createProcere以備後用:
String
createProcere
=
"create
procere
SHOW_SUPPLIERS
"
+
"as
"
+
"select
SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME
"
+
"from
SUPPLIERS,
COFFEES
"
+
"where
SUPPLIERS.SUP_ID
=
COFFEES.SUP_ID
"
+
"order
by
SUP_NAME";
下面的代碼段使用Connection對象con來創建Statement對象,用於把創建存儲過程的SQL語句發送給資料庫:
Statement
stmt
=
con.createStatement();
stmt.executeUpdate(createProcere);
存儲過程SHOW_SUPPLIERS將作為一個可調用的資料庫對象在資料庫中編譯並存儲,調用時就像調用其他方法一樣。
4. SQL 存儲過程運用事物的意義
事務用來維護數據的一致性。
比如某人員表有記錄:
BH XM
001 張三
同時工資表有記錄:
RYBH GZ
001 2000
那麼如果想修改人員表BH欄位的值,應該同時修改工資表RYBH欄位的值,運用事務就可以保證這兩個修改操作「同時得到執行」或「同時未得到執行」。
5. 在pl/sql中創建的存儲過程中的事務是什麼
如果p1是調用p2後,再進行dml操作
先執行p2的
既然p2中向外拋出錯誤
你可以在p1中
捕獲到異常rollback下即可
6. SQL的存儲過程中的事物處理是begin tran 還是begin transaction
倆個都行,tran是transaction的簡寫形式,就想存儲過程:proc是process的簡寫一樣的.
7. SQL的存儲過程和事務這兩者一般在什麼情況下使用
存儲過程(主要有插入記錄、刪除記錄、修改記錄等)主要用於在程序中調用,這程調用在網路應用程序中可以減少網路傳輸流量,提高程序執行效率。
以下是我以前在網上找的:
事務有四個特性
事務的原子性、一致性、獨立性及持久性
事務的原子性是指一個事務要麼全部執行,要麼不執行
事務的一致性是指事務的運行並不改變資料庫中數據的一致性.
事務的獨立性是指兩個以上的事務不會出現交錯執行的狀態.
事務的持久性是指事務運行成功以後,就系統的更新是永久的.不會無
8. SQL 存儲過程和事務問題
自定義的存儲過程: 常用格式 Create procere procee_name [@parameter data_type][output] [with]{recompile|encryption} as sql_statement解釋: output:表示此參數是可傳回的with {recompile|encryption}recompile:表示每次執行此存儲過程時都重新編譯一次encryption:所創建的存儲過程的內容會被加密如: 表book的內容如下 編號 書名 價格 001 C語言入門 $30 002 PowerBuilder報表開發 $52 實例1:查詢表Book的內容的存儲過程 create proc query_book as select * from book go exec query_book 實例2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額 Create proc insert_book @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output with encryption ---------加密 as insert book(編號,書名,價格) Values(@param1,@param2,@param3) select @param4=sum(價格) from book go 執行例子: declare @total_price money exec insert_book '003','Delphi 控制項開發指南',$100,@total_price print '總金額為'+convert(varchar,@total_price) go存儲過程的3種傳回值: 1.以Return傳回整數 2.以output格式傳回參數 3.Recordset傳回值的區別: output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中 實例3:設有兩個表為Proct,Order,其表內容如下: Proct 產品編號 產品名稱 客戶訂數 001 鋼筆 30 002 毛筆 50 003 鉛筆 100 Order 產品編號 客戶名 客戶訂金 001 南山區 $30 002 羅湖區 $50 003 寶安區 $4請實現按編號為連接條件,將兩個表連接成一個臨時表,該表只含編號.產品名.客戶名.訂金.總金額,總金額=訂金*訂數,臨時表放在存儲過程中代碼如下: Create proc temp_sale as select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額 into #temptable from Proct a inner join Order b on a.產品編號=b.產品編號 if @@error=0 print 'Good' else print 'Fail' go來源: http://www.knowsky.com
9. sql中的存儲過程里怎麼寫事務回滾啊
CREATE PROC [dbo].[notice_Delete] --- 同時刪除該通知書和對應的節點
@tbl VARCHAR(30),
@pid INT
AS
BEGIN
DECLARE @tblname VARCHAR(30) ;
DECLARE @sql VARCHAR(1000) ;
SET @tblname = @tbl
SET @sql = 'delete ' + @tblname + ' where id ='
+ CONVERT(VARCHAR(10), @pid)
BEGIN TRAN --開始事務
EXEC ( @sql
)
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
DELETE FROM tbl_treenotice
WHERE purposeid = @pid
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
COMMIT TRAN --提交事務
END
END
END