sqlserver存儲過程語法
第一步:點擊資料庫下的「可編程性」,選擇「存儲過程」,點擊滑鼠右鍵,選擇「新建存儲過程」
第二步:在create
PROCEDURE
後
輸入存儲過程的名字,緊跟著的就是定義存儲過程的參數,接下來就可以去編寫自己所需要組裝的存儲過程語句了
第三步:
編譯存儲過程,在工具欄上按下執行按鈕,如果沒有錯誤,就編寫成功了。
第四步:調用:在sqlserver的語句查詢框中,輸入exec
存儲過程名
參數,執行就可以了。
基本語法格式如下:中括弧帶的是可選項
create
proc
|
procere
pro_name
[{@參數數據類型}
[=默認值]
[output],
{@參數數據類型}
[=默認值]
[output],
....
]
as
begin
SQL_statements
--業務處理
end
2. sqlserver怎麼創建存儲過程
q 定義存儲過程的語法
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 = 默認值,
…… ,
@參數n 數據類型 OUTPUT
AS
SQL語句
GO
q 和C語言的函數一樣,參數可選
q 參數分為輸入參數、輸出參數
q 輸入參數允許有默認值
創建不帶參數的存儲過程
CREATE PROCEDURE proc_stu /*proc_stu為存儲過程的名稱*/
AS
DECLARE @writtenAvg float,@labAvg float /*筆試平均分和機試平均分變數 */
SELECT @writtenAvg=AVG(writtenExam),
@labAvg=AVG(labExam) FROM stuMarks
print '筆試平均分:'+convert(varchar(5),@writtenAvg)
print '機試平均分:'+convert(varchar(5),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本班考試成績:優秀' /*顯示考試成績的等級 */
ELSE
print '本班考試成績:較差'
print '--------------------------------------------------'
print ' 參加本次考試沒有通過的學員:'
SELECT stuName,stuInfo.stuNo,writtenExam,labExam /*顯示未通過的學員 */
FROM stuInfo INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<60 OR labExam<60
GO
調用存儲過程
q EXECUTE(執行)語句用來調用存儲過程
q 調用的語法
EXEC 過程名 [參數]
創建帶參數的存儲過程
q 存儲過程的參數分兩種:
q 輸入參數
q 輸出參數
q 輸入參數:
用於向存儲過程傳入值,類似C語言的按值傳遞;
q 輸出參數:
用於在調用存儲過程後,
返回結果,類似C語言的
按引用傳遞;
3. SQL的存儲過程 語法格式是什麼
這里以創建名為 GetStuCou 的無參數存儲過程為例:
create procere GetStuCou
as
begin //開始存儲過程
select * from Students left join Course c on s.C_S_Id=c.C_Id
end //結束存儲過程
下面是存儲過程的其他用法:
--創建存儲過程
CREATE PROCEDURE PROC(後面接類型)
--定義變數--簡單賦值
declare @a intset @a=5 print @a
--使用select語句賦值
declare @user1 nvarchar(50)
select @user1='張三'
print @user1
declare @user2 nvarchar(50)
--創建臨時表1 create table #DU_User1
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
);
--定義一個游標
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打開游標
open user_cur
while @@fetch_status=0 begin
--讀取游標
fetch next from user_cur into @ID,@Oid,@Login
print @ID
--print @Login
end
close user_cur

(3)sqlserver存儲過程語法擴展閱讀:
創建存儲過程的注意事項:
1、保持事務簡短,事務越短,越不可能造成阻塞。
2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。
3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。
4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。
5、避免超時後還可打開事務 SET XACT_ABORT ON統計信息可以優化查詢速度,統計信息准確可以避免查詢掃描,直接進行索引查找。
4. 在sqlserver的存儲過程中怎樣使用if-else if
ifa>b
Begin
print'a'
End
Elseifa<b
Begin
print'b'
End
Else
Begin
print'代碼'
End
if-else語法為,最好不要把beginend省略掉。否則,存儲過程比較長可能會報語法錯誤
5. sql server 從多個表取出結果,存儲過程怎麼寫
首先需要知道「另一個存儲過程」的結果集的所有列的類型。
假設「另一個存儲過程」的名字是sp1,沒有參數,返回的結果集共3列,全部為int型,那麼「存儲過程」里添加一個與結果集列數相同的臨時表或表變數用於接收「另一個存儲過程」的結果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT * FROM @t
使用SQLSERVER存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:
引用:
Create PROC 存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL 語句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要輸出的參數
AS
BEGIN
-- 將uName的值賦給 @ostrUserName 變數,即要輸出的參數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 語句(完整語句為Create PROCEDURE)的意思就是告訴SQL SERVER,現在需要建立一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,所有用戶定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在「查詢分析器」里執行一次,SQL SERVER就會在當前資料庫中創建一個名為「upGetUserName」的存儲過程。你可以打開「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「存儲過程」,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
二、存儲過程的調用
之前已經創建了一個名為「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程建立好了,接下來就是要在應用程序里調用了,下面看一下在ASP程序里的調用。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserName"
』// 設置用戶編號
.Parameters.Item("@intUserId").Value = 1
』// 執行存儲過程
.Execute
』// 取得從存儲過程返回的用戶名稱
Response.Write "用戶名:" & .Parameters.Item("@ostrUserName").Value
End With
』// 釋放對象
Set adoComm = Nothing
通過以上兩步,已經可以創建和使用簡單的存儲過程了。下面來看一個稍微復雜點的存儲過程,以進一步了解存儲過程的應用。
三、存儲過程的實際應用
用戶登錄在ASP項目中經常會使用到,但使用存儲過程來做驗證可能不多,那麼做例子,寫一個簡單的用戶登錄驗證的存儲過程。
引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定義一個臨時用來保存密碼的變數
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 從表中查詢當前用戶的密碼,賦值給 @strPwd 變數,下面要對他進行比較
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName
IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用戶最後登錄時間
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END
用戶登錄的存儲過程建立好了。注意,在一個區域內如果有多條語句時,必需使用BEGIN...END關鍵字。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upUserLogin"
』// 設置登錄名稱
.Parameters.Item("@strLoginName").Value = "***"
』// 設置登錄密碼
.Parameters.Item("@strLoginPwd").Value = "123456"
』// 執行存儲過程
.Execute
』// 判斷是否登錄成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登錄成功!"
Else
Response.Write "不是吧,好像錯了哦。。。"
End If
End With
』// 釋放對象
Set adoComm = Nothing
通過以上的步驟,簡單用戶登錄驗證過程也做完了,現在只要把它整合到程序中就可以實現簡單的用戶登錄驗證了,關於其他細節就由你自己來處理了。
上面介紹的兩個存儲過程都是只返回一個值的,下面我們來看一個返回一個記錄集的存儲過程。
引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 從資料庫中抽取符合條件的數據
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合計
UNION
Select 』合計人數:』,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END
現在我們來看一下ASP程序的調用。
引用:
Dim adoComm
Dim adoRt
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserInfos"
』// 設置用戶組
.Parameters.Item("@intUserGroup").Value = 1
』// 執行存儲過程,和以上幾個例子不同,這里使用RecordSet的Open方法
adoRs.Open adoComm
』// 顯示第一個值
Response.write adoRs.Fields(0).Value
End With
』// 釋放對象
Set adoRs = Nothing
Set adoComm = Nothing
分享
6. 怎樣在Sql server中創建,執行和刪除存儲過程
sqlserver存儲過程的基本操作:
一、創建存儲過程
1、語法格式:
createproc|procerepro_name
[{@參數數據類型}[=默認值][output],
{@參數數據類型}[=默認值][output],
....
]
as
SQL_statements
以上是最基本語法,舉個簡單的例子:
CREATEprocp_test
as
selectretu=1
存儲過程返回一個結果集:1
2、執行存儲過程
EXECUTEProcere_name''--存儲過程如果有參數,後面加參數格式為:@參數名=value,也可直接為參數值value
例子調用結果:
dropprocereprocere_name--在存儲過程中能調用另外一個存儲過程,而不能刪除另外一個存儲過程
7. 在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%';

(7)sqlserver存儲過程語法擴展閱讀:
SQL存儲過程優點:
1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
