SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
生活随笔
收集整理的這篇文章主要介紹了
SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
存儲過程存儲過程分為系統存儲過程和自定義存儲過程存儲過程通過將處理數據的程序從客戶端應用程序移動到服務器,存儲過程是放在服務器上的,通過客戶端下達指令調用存儲過程的時候,這個過程是在服務器上發生的,自然就不會占用網絡的帶寬就會降低網絡流量。存儲過程就是一組為了完成特定功能的T-SQL語句。就是一組語句隨時隨地拿出來調用。經過編譯后,它存儲在SQLserver服務器端的數據庫中,換句話說這個T-SQL語句不是普通的T-SQL語句,是經過編譯的,存儲在服務器中,它是有名稱的,根據名稱調用存儲過程,并進行相應的操作,與函數有些相似,但不同。利用存儲過程可以加速T-SQL語句的執行。系統存儲過程在SQLserver安裝之后就以及存儲在SQLserver的master數據庫中(master數據庫里面存儲了所有的系統存儲過程。在新建數據庫的時候它們自動的將這些存儲過程賦值到新的數據庫中)也就是說創建一個新的數據庫存儲過程自然就存在了。所有的系統存儲過程自然就存在了。系統存儲過程是以sp開頭的。存儲過程通常命名 (附加數據庫需要先進行分離,分離后才可繼續附加,或者附加的數據庫是系統所沒有的。)sp_attach_db 附加數據庫 exec sp_attach_db @dbname='newlts',@filename1='D:\具體存儲路徑' \\分離數據庫''括號里為數據庫名稱 sp_detach_db 分離數據庫 exec sp_detach_db 'newlts' \\分離數據庫''括號里為數據庫名稱 exec sp_renamedb test,test1 \\給數據庫進行改名,test改成test1sp_rename 給對象改名 存儲過程是可以有參數的,也可以有返回值的,但和函數并不相同,函數的返回值可以直接調用和賦值。存儲過程的返回值只能指明執行是否成功,并且不像函數那樣可以直接調用sp_help 顯示數據庫相關數據 存儲過程和函數的概念,過程可以執行操作,但沒有返回值。 !!!!!!!存儲過程的返回值就是指明執行是否成功。sp_changedbowner 改變數據庫所有者 存儲過程的優點: 在SQLserver中T-sql可以判做是一種主編程語言,利用它來編程有兩種方式:一、在本地存儲T-sql程序并創建應用程序,向SQLserver發送命令。 Exec sp_changedbowner '所有者' 二、編寫存儲過程,并把它存儲在SQLserver的服務器上,接下來來創建應用程序,來調用存儲過程對結果進行處理。sp_password 改密碼 存儲過程的四大優點:一、提高應用程序的通用性和可移植性,存儲過程創建后可以在程序中被多次調用,類似于函數一樣。應用程序是調用的存儲過程,Exec sp_password 舊密碼 新密碼 登錄名 如果改相應的程序功能,存儲過程可以隨時修改,應用程序不用改。 二、可以更有效的管理用戶的權限,有些用戶可以調用存儲過程,可以執行某些操作,某些用戶不能執行某些操作,則不能調用存儲過程
use LtsDatabase \\獲得數據庫使用權限 系統管理員可以通過對執行某一操作的這樣的存儲過程它的調用權限進行限制,從而限制相應的數據哪些用戶可以訪問,哪些用戶不可以訪問,
exec sp_raname '網站職員表','新網站職員表' \\為表進行改名。 這樣一來就實現了對相應數據訪問的控制。避免非授權用戶進行操作三、可以提高T-SQL語句的速度,存儲過程本身是被編譯過的,如果某一操作包含了大量的T-SQL代碼,而且要被執行多次,這個時候就比較適合存儲過程因為存儲過程是放在服務器端的,使用存儲過程比直接調用T-SQL語句要快得多,因為是被編譯過的四、減輕網絡負擔、存儲過程的創建(自定義存儲過程的創建)過程名稱 創建存儲過程的格式 !!!(函數的返回值可以被調用,存儲過程的返回值不能被調用)
create proc newProc \\創建存儲過程 execute newProc \\調用存儲過程 Create Proc 過程名
as @Parameter 參數類型 (普通參數)\\給存儲過程本身使用的,普通參數可以直接傳遞給存儲過程,存儲過程調用它來完成。
begin @Parameter 參數類型 output (輸出參數)\\利用存儲過程給某些變量賦值,當然不能直接用他的返回值,
print 'hello word!'\\輸出hello word! as 這個時候就可以用到輸出參數。
end Begin !!!!!!! 輸出參數 可以將一個變量傳遞給它,存儲過程作為輸出參數,存儲過程執行完成之后,會將結果直接賦值 ............. 給這個變量,對這個變量重新賦值,但是這里有一點需要注意的是通過輸出參數完成的賦值,而并非通過存儲過程End 的返回值來完成的賦值,這是一個和函數根本的不同普通參數的使用create proc newproc2 \\創建存儲過程名稱
@testString1 varchar(60), !!!!!傳遞兩個參數之間必須用逗號隔開,否則會有錯誤
@testString2 varchar(60) \\調用的時候可以給它傳遞的兩個參數,test1和test2,這兩個參數在執行存儲過程的時候
as 會輸出下方兩個print后面的值。
begin
print '第一個參數為:'+@testString1, !!!!!傳遞兩個參數之間必須用逗號隔開,否則會有錯誤
print '第二個參數為:'+@testString2
endexec newproc2 '大家好','這是存儲過程' \\存儲過程的調用,和傳遞參數。輸出參數的使用\\帶有輸出參數的存儲過程
create proc newproc8 \\創建存儲過程并命名
@testVarA int, \\定義類型(普通參數)
@testVarB int,
@testVarSum int Output \\定義類型(輸出參數) \\輸出參數類似于函數的返回值,函數的返回值可以直接作為一個被調用的值給某一個變量賦值。
as
begin
set @testVarSum=@testVarA+@testVarB \\條件
end調用存儲過程declare @testA int \\定義一個變量A
set @testA=60 \\賦值
print @testA \\輸出變量A
execute newproc8 600,800,@testA output \\調用此存儲過程,并傳遞三個參數,將600,800,賦值給@testVarA和@testVarB,A+B的值賦給@testVarSum然后@testVarSum再賦值給@testA output
print @testA \\輸出 @testA output,這里的output是將@testA設定為輸出參數 重新賦值,重新賦值之后就變成1400了60 \\第一個輸出的結果自定義的變量@testA
1400 \\第二個結果是如何在存儲過程當中通過傳遞進來的參數進行查找符合條件的記錄
根據輸入進來的數據查詢符合條件的記錄create proc newProcA \\創建存儲過程并命名
@testNameA varchar(30) \\定義傳遞進來的參數的數據類型
as
begin
select * from 網站職員表 where 姓名=@testNameA \\從網站職員表中查找符合條件的記錄,
end (在@testName中輸入的參數必須和在網站職員表中的姓名字段相等(存在))修改存儲過程存儲修改有兩種方法,一種是純T-SQL語句修改,另一種是視圖修改。把所有的記錄都要參與查詢,
但并不是把它們都顯示出來把網站職員表中所有記錄工資最高的員工,把它的工資顯示出來就可以,
并且作為輸出參數進行輸出!!!通過視圖修改存儲過程USE [LtsDatabase試驗]
GO
/****** Object: StoredProcedure [dbo].[newProcA] Script Date: 06/03/2019 11:31:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[newProcA]
@testNameA varchar(30) \\\\@testMoney money output
as ( 修改前 ) ( 修改后 )
begin
select * from 網站職員表 where 姓名=@testNameA \\\\select @testMoney=MAX(工資) from 網站職員表
end ( 修改前 ) ( 修改后 )調用此存儲過程declare @MaxMoney money \\定義一個變量名稱為@MaxMoney,其變量類型為貨幣型moneyexecute newProcA @MaxMoney output \\調用存儲過程名稱為newProcA將@MaxMoney作為輸出參數傳遞給@testMoneyselect @MaxMoney as 工資最高的員工工資 \\用select對變量進行輸出通過T-SQL語句修改存儲過程(重新寫一個新的存儲過程) Create Proc \\創建存儲過程
alter proc newProcA \\修改存儲過程,名字為newProcA Alter Proc \\修改存儲過程
@testNameA varchar(30) Drop Proc \\刪除存儲過程
as
begin
select * from 網站職員表 where 姓名=@testNameA
end重命名存儲過程 刪除存儲過程 T-SQL語句刪除 刪除多個過程sp_rename newProcA,newProc \\利用sp_rename進行重命名 右鍵存儲過程直接刪除 drop Proc NewProc drop Proc NewProc,NewProc2,NewProc3(命名前)(命名后)創建一個存儲過程,傳遞給它兩個參數它可以比較兩個參數的大小。Create Proc ProcSimple1 \\創建一個存儲過程,名字為ProcSimple1@testVar1 int, \\傳遞兩個參數@testVar2 int \\傳遞兩個參數,這兩個參數是在調用存儲過程的時候,向它傳遞的,并非輸出參數,只是兩個普通參數asbeginif @testVar1>@testVar2 \\比較兩個參數的大小print cast(@testVar1 as varchar(10))+'大于'+cast(@testVar2 as varchar(20)) \\將變量@testVar1和變量@testVar2的int類型轉換為varchar類型。轉換
else if @testVar1<@testVar2 \\比較兩個參數的大小print cast(@testVar1 as varchar(10))+'小于'+cast(@testVar2 as varchar(10))elseprint cast(@testVar1 as varchar(10))+'等于'+cast(@testVar2 as varchar(10))end調用存儲過程execute ProcSimple1 100,300 \\調用存儲過程,并比較出兩個數值的大小調用存儲過程declare @testInt1 int,@testInt2 int \\定義兩個變量,及變量數據類型select @testInt1=600,@testInt2=2500 \\為這兩個變量賦值execute ProcSimple1 @testInt1,@testInt2 \\將@testInt1和@testInt2的值傳遞給存儲過程ProcSimple1中@testVar1,@testVar2兩個參數調用ProcSimple1這個存儲過程,輸出相應的值。創建一個存儲過程 調用這個存儲過程 Create proc testUser \\創建存儲過程并將其命名為testUser execute testUser 'user2','abc' \\調用存儲過程,輸入用戶名和密碼
@testUser varchar(60), \\創建普通參數,及其數據類型 用戶名 密碼
@testPassWord varchar(60) \\創建普通參數,及其數據類型
as
begin \\程序塊開始執行
declare @testMsg varchar(100) \\聲明變量及數據類型
if @testUser='user1' \\首先判斷用戶是否等于user1,如果是,繼續往下循環beginif @testPassWord='123' \\判斷密碼是否等于123set @testMsg'歡迎學習存儲過程。' \\是的話,輸出歡迎.....else \\否則set @testMsg='對不起,密碼錯誤' \\輸出對不起......end
else if @testUser='user2' \\在判斷用戶是否等于user2....往下循環beginif @testPassWord='abc' \\再判斷密碼是否為abcset @testMsg='歡迎學習存儲過程。' \\是的話,輸出歡迎.....
else \\否則
set @testMsg='對不起,密碼錯誤' \\對不起....
end
else \\如果前兩個條件都不成立
set @testMsg='請輸入正確的用戶名和密碼'
print @testMsg \\則輸出請輸入正確的....
end ?
轉載于:https://www.cnblogs.com/LNCC-ZhangXiang/p/11002276.html
總結
以上是生活随笔為你收集整理的SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男性不孕不育检查抗体
- 下一篇: php开发面试题---php面向对象详解