sql儲存過程的簡單使用

2022-03-30 08:42:57 字數 3640 閱讀 5821

儲存過程(stored procedure)是資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。

建立儲存過程的基本**結構

create procedure procedure_name  

--procedure_name為儲存過程名(不能以阿拉伯數字開頭),在乙個資料庫中觸發器名是唯一的。名字的長度不能超過個字。procedure可以簡寫為proc。

@param1 datatype,@param2 datatype

--@param1和@param2為儲存過程的引數,datatype為引數型別,多個引數用逗號隔開,最多允許個引數。

as --儲存過程要執行的操作

begin

--begin跟end組成乙個**塊,可以寫也可以不寫,如果儲存過程中執行的sql語句比較複雜,用begin和end會讓**更加整齊,更容易理解。

endgo --go就代表結操作完畢  

exec procedure_name [引數名] --呼叫儲存過程procedure_name。

drop procedure procedure_name --刪除儲存過程procedure_name,不能在乙個儲存過程中刪除另乙個儲存過程,只能呼叫另乙個儲存過程

show procedure status --顯示資料庫中所有儲存的儲存過程基本資訊,包括所屬資料庫,儲存過程名稱,建立時間等

show create procedure procedure_name --顯示儲存過程procedure_name的詳細資訊

exec sp_helptext procedure_name --顯示你這個procedure_name這個物件建立文字

下面兩個小例子

儲存過程建立

create procedure sp_p1

asselect * from people

sql呼叫

exec sp_p1

c#呼叫

sqlconnection conn = new sqlconnection();

conn.connectionstring = @"server=pc201312290054\sqlexpress;database=test;uid=sa;pwd=sa";//連線資料庫

conn.open();

sqlcommand cmd = new sqlcommand("sp_p1", conn);//其中proc為儲存過程名稱

cmd.commandtype = commandtype.storedprocedure;//指定執行型別為儲存過程

datatable dt = new datatable();

//執行儲存過程

sqldataadapter sda = new sqldataadapter(cmd);

//將結果填充到datatable中

sda.fill(dt);

//return dt;//返回datatable

datagridview1.datasource = dt;

建立

create procedure sp_p2

@id

intas

select * from people where id=@id

sql 呼叫

exec sp_p2

1c# 呼叫

sqlconnection conn = new

sqlconnection();

conn.connectionstring = @"

server=pc201312290054\sqlexpress;database=test;uid=sa;pwd=sa

";//

連線資料庫

conn.open();

sqlcommand cmd = new sqlcommand("

sp_p2

", conn);//

其中proc為儲存過程名稱

cmd.commandtype = commandtype.storedprocedure;//

指定執行型別為儲存過程

cmd.parameters.add(new sqlparameter("

@id", 1));//

傳遞引數

datatable dt = new

datatable();

//執行儲存過程

sqldataadapter sda = new

sqldataadapter(cmd);

//將結果填充到datatable中

sda.fill(dt);

datagridview1.datasource = dt;

exec sp_databases; --檢視資料庫

exec sp_tables; --檢視表

exec sp_columns student;--檢視列

exec sp_helpindex student;--檢視索引

exec sp_helpconstraint student;--約束

exec sp_stored_procedures;

exec sp_helptext

'sp_stored_procedures

';--檢視儲存過程建立、定義語句

exec sp_rename student, stuinfo;--修改表、索引、列的名稱

exec sp_renamedb mytempdb, mydb;--更改資料庫名稱

exec sp_defaultdb

'master

', '

mydb

';--更改登入名的預設資料庫

exec sp_helpdb;--資料庫幫助,查詢資料庫資訊

exec sp_helpdb master;

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量(復用性高,物件導向的程式設計思想)

4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

1.除錯麻煩。

2.移植問題,資料庫端**當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。

3.重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

4.如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。

SQL 儲存過程的使用

1.在mssql建立儲存過程,在db 儲存過程 新建儲存過程 右鍵 create procedure user logon check username varchar 45 userpsw varchar 45 asselect from users where username username...

SQL 儲存過程的使用

儲存過程類似乙個函式,可以執行一條或者多條sql語句,可帶引數,可返回值 為了簡化操作,方便更改和擴充套件,將乙個事件的處理封裝在乙個單元中供使用。建立儲存過程 不帶引數的 create proc sp sample asselect from sample 建立儲存過程 帶引數的 create p...

簡單的sql 分頁儲存過程

建立表開始 ifobject id test u isnot null drop table test create table dbo test id int identity 1 1 not null,title varchar 50 null 建立表結束 分頁儲存過程開始 create pro...