SQLserve数据库存储过程
存儲過程
能夠快速簡便的實現某種功能,
系統存儲過程:由數據庫管理器創建,實現對數據庫管理器、數據庫對象的操作,以sp_開頭
擴展存儲過程
允許使用其他編程語言創建外部存儲過程,以xp_
用戶存儲過程
用戶自行編寫,對某張表或數據庫進行快速操作的存儲過程
調用存儲過程
exec 存儲過程名 參數值
系統存儲過程
sp_databases 列出服務器上的所有數據庫信息,包括數據庫名和數據大小
sp_helpdb 報告有關指定數據庫或所有數據庫信息
sp_renamedb 更改數據庫名
sp_tables 返回當前環境下可查詢的表信息
sp_columns 返回某個視圖或表的信息,包括數據類型和長度
sp_help 查看某個數據庫對象的信息,如列名、主鍵、約束、外鍵、索引等
sp_helpconstraint 查看某個表的約束
sp_helpindex 查看某個表的索引
sp_stored_procedures 顯示存儲過程列表
sp_password 添加或修改登錄賬戶的密碼
sp_helptext 顯示默認值、未加密的存儲過程、用戶自定義過程、觸發器或視圖實際文本
擴展存儲過程
應用舉例:
EXEC ?xp_cmdshell ?‘mkdir ?D:\shopping’, ?NO_OUTPUT;
--創建文件夾D:\shopping
EXEC ?xp_cmdshell ?‘dir ?D:\shopping\’
使用以下語句來啟用:
EXEC ?sp_configure ?‘show ?advanced ?options’,1
\\顯示高級配置信息
GO
RECONFIGURE --重新配置
GO
EXEC ?sp_configure ?‘xp_cmdshell’,1 --打開xp_cmdshell
GO
RECONFIGURE --重新配置
GO
用戶存儲過程
完整的存儲過程包括
輸入參數和輸出參數
執行的T-sql語句
存儲過程返回值
①無參存儲過程
語法格式:
CREATE ?PROC [EDURE] ?<過程名>
AS
<T-SQL語句> ?????----包括增刪改查
實例
create proc name
as
select * from User_Info
where
User_pwd='123.com'
執行name存儲過程
exec name
②帶入參存儲過程
在調用存儲過程時需要手動輸入條件稱為入參存儲過程。
語法格式:
CREATE ?PROC ?<過程名1>(<入參1>[,<入參2>]…)
AS
<過程化SQL塊>
實例
create proc loginname1(@login varchar(50))
as
select * from User_Info
where
User_login_name=@login
exec loginname1 'zhaosi'
③帶出參存儲過程
在調用出參存儲過程時直接顯示出參結果稱為出參存儲過程。
語法格式:
CREATE ?PROC ?<過程名>(<入參1>,<出參1 ?OUTPUT> )
AS
<過程化SQL塊>
實例:
create proc loginname1(@type varchar(50),@num int output)
as
select @num=count(*) from User_Info
where
User_login_name=@type;
declare @num int
declare @type varchar(50)='zhaosi'
exec loginname2 @type,@num output
select @type,@num
修改存儲過程
將創建命令改成alter即可
---查看存儲過程屬性信息、參數與數據類型---
sp_help ?<存儲過程名>
sp_help loginname1
刪除存儲過程
語法格式:
DROP ?PROC ?<存儲過程名>
drop proc loginname1
觸發器
用戶對表的增刪改查會激活觸發器執行相應動作
常用觸發器
DDL觸發器:響應事件包括create、alter、drop,
DML觸發器:insert、update、delete
DML觸發器又分為alter觸發器、instead of觸發器
alter屬于后置觸發器,只適用于基本表
instead of是前置觸發器,適用于表和視圖
DML觸發器的類型
delete:刪除表中數據觸發
insert:插入表中數據觸發
update:更新表中數據觸發
創建觸發器
語法格式:
CREATE ?TRIGGER ?<觸發器名>
ON <數據表 | 視圖 | DATABASE>
<AFTER | FOR | INSTEAD ?OF> ?<delete | insert | update>
AS
<觸發動作體>
實例
create trigger ppp
on User_Info
for insert
as
select * from User_Info;
修改觸發器
重命名觸發器
exec ?sp_rename ?<原觸發器名>,<新觸發器名>
exec sp_rename ppp,ooo
修改觸發器內容
ALTER ?TRIGGER ?<觸發器名>
ON ?<數據表 | 視圖 | DATABASE>
<AFTER | FOR | INSTEAD ?OF><觸發事件>
AS
<觸發動作體>
禁用觸發器
語法格式:
---禁用DML觸發器---
DISABLE ?TRIGGER ?<觸發器名> ?ON ?<表 | 視圖>
---禁用DDL觸發器Goods_tring---
DISABLE ?TRIGGER ?Goods_tring ?ON ?DATABASE
disable trigger ooo on User_Info
刪除觸發器
語法格式:
DROP ?TRIGGER ?<觸發器名>
drop trigger ooo
事務
是訪問并可能操作各種數據的一個數據庫操作序列,要么全部執行,要么全部不執行,不可分割。
事務的特性
原子性:事務中所有操作是不可分割的,要么全部執行,要么全部不執行
一致性:幾個并行執行的事務,并行執行的結果必須與按照某一順序串行執行結果一致
奪隔離性:事務的執行不受其他事務的干擾,系統執行的中間結果對其他事務必須是透明的
奪持久性:對于任意已提交的事務,系統必須保證該事務對數據庫的改變不丟失
數據庫事務模型:
顯式事務:稱為用戶自定義事務,是指顯式的方式定義開始和結束的事務,當使用start transaction和commit語句時表示顯式事務
隱式事務:指每一條數據操作都自動成為一個事務,事務的開始是隱式的。
自動事務:指能夠自動開啟事務并且能夠自動結束事務,如果沒有出現異常則自動提交,如果執行錯誤則自動回滾
Windows ?SQL ?Server數據庫默認使用的就是隱式事務。
begin ?transaction:開啟事務
commit ?transaction:提交事務
rollback ?transaction:回滾事務
實例:
開啟顯示事務,開啟一個事務,插入一條數據,然后回滾。
set implicit transactions off; \\可忽略
go
begin transaction;
go
insert into User_Info
(User_login_name,User_pwd)
values
('chou','123456')
rollback transaction;
總結
以上是生活随笔為你收集整理的SQLserve数据库存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARCGIS进行投影变换
- 下一篇: 数据库中创建存储过程的方法