sql調(diào)用存儲過程:存儲過程里用exec 執(zhí)行另一存儲過程名及它需要的參數(shù)就可以了 如 exec abc '1', '2'(abc 是存儲過程的名字, '1','2' 是它的參數(shù)。
拓展資料:
結(jié)構(gòu)化查詢語言是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng), 可以使用相同的結(jié)構(gòu)化查詢語言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語言語句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。
存儲過程由SQL語句和流程控制語句組成。它的功能包括:接受參數(shù);調(diào)用另一過程;返回一個(gè)狀態(tài)值給調(diào)用過程或批處理,指示調(diào)用成功或失敗;返回若干個(gè)參數(shù)值給調(diào)用過程或批處理,為調(diào)用者提供動(dòng)態(tài)結(jié)果;在遠(yuǎn)程SQL Server中運(yùn)行等。
1)·存儲過程是預(yù)編譯過的,所以存儲過程執(zhí)行速度很快.
2)·存儲過程和待處理的數(shù)據(jù)都放在同一臺運(yùn)行SQL Server的計(jì)算機(jī)上,使用存儲過程查詢當(dāng)?shù)氐臄?shù)據(jù),效率自然很高
3)·存儲過程一般多由Client端通過存儲過程的名字進(jìn)行調(diào)用,減少了網(wǎng)絡(luò)傳輸量,加塊系統(tǒng)速度.
4)·存儲過程還有著如同C語言子函數(shù)那樣的被調(diào)用和返回值的方便特性。
使用SQL語句創(chuàng)建存儲的具體過程如下:
1、首先,打開企業(yè)管理器,選擇【工具】-【查詢分析器】:
2、然后,輸入SQL語句。如下:
CREATE PROCEDURE byroyalty1 @percentage int
AS
select au_id from titleauthor
where titleauthor.royaltyper = @percentage
GO
3、然后,點(diǎn)擊確定之后,命令就會(huì)自動(dòng)添加進(jìn)查詢中:
4、然后執(zhí)行一下剛輸入的命令:
5、最后,就可以在彈出的小窗口中查看存儲過程了:
(首先聲明一下,我這是從別處抄下來的,雖然我的行為惡劣,不光彩,但是,希望答案對你有所幫助)
存儲過程是指封裝了可重用代碼的模塊或例程。存儲過程可以接受輸入?yún)?shù)、向客戶端返回表格或標(biāo)量結(jié)果和消息、調(diào)用數(shù)據(jù)定義語言(DDL)和數(shù)據(jù)操作語言(DML)語句,然后返回輸出參數(shù)。在SQLServer2005中,存儲過程有兩種類型:Transact-SQL或CLR。
Transact-SQL
Transact-SQL存儲過程是指保存的Transact-SQL語句集合,可以接受和返回用戶提供的參數(shù)。例如,存儲過程中可能包含根據(jù)客戶端應(yīng)用程序提供的信息在一個(gè)或多個(gè)表中插入新行所需的語句。存儲過程也可能從數(shù)據(jù)庫向客戶端應(yīng)用程序返回?cái)?shù)據(jù)。
CLR
CLR存儲過程是指對Microsoft.NETFramework公共語言運(yùn)行時(shí)(CLR)方法的引用,可以接受和返回用戶提供的參數(shù)。它們在.NETFramework程序集中是作為類的公共靜態(tài)方法實(shí)現(xiàn)的。
在 SQL 存儲過程中,SET 語句用于初始化變量或設(shè)置變量的值,其基本語法格式如下:
```
SET variable = value;
```
其中,variable 是要設(shè)置的變量,value 是設(shè)置的變量值。
SET 語句可以用于存儲過程中的多個(gè)方面,例如:
1. 初始化存儲過程參數(shù)或本地變量,例如:
```
CREATE PROCEDURE example_procedure(@param1 INT, @param2 VARCHAR(50))
AS
BEGIN
SET @param1 = 0;
SET @param2 = 'Hello, World!';
...
END;
```
2. 設(shè)置 SELECT 查詢結(jié)果,并返回單個(gè)值或結(jié)果集,例如:
```
CREATE PROCEDURE example_procedure2()
AS
BEGIN
DECLARE @result1 INT, @result2 INT;
SET @result1 = 1;
SELECT @result2 = [SomeColumn] FROM [SomeTable] WHERE [SomeCondition];
...
END;
```
3. 設(shè)置條件語句中的變量,例如:
```
CREATE PROCEDURE example_procedure3(@param INT)
AS
BEGIN
DECLARE @result VARCHAR(50);
IF @param > 10
SET @result = 'Larger than 10';
ELSE
SET @result = 'Less than or equal to 10';
...
END;
```
需要注意的是,SET 語句只能在存儲過程中使用,并且其語法和用法與普通的 SQL 語句有所不同。在編寫存儲過程時(shí),必須注意使用正確的語法和變量名稱,以確保存儲過程能夠準(zhǔn)確和有效地執(zhí)行。
多長都有可能,40是很正常的。
1.盡量優(yōu)化語句,盡量少用游標(biāo)。2.修改較為常用的表要注意,最好先在臨時(shí)表中作好運(yùn)算和其它處理,最后在修改這些表,以免較慢的存儲過程長時(shí)間鎖定表記錄,影響數(shù)據(jù)正常使用。3.將連接超時(shí)和命令超時(shí)適當(dāng)擴(kuò)大,以免超時(shí)錯(cuò)誤。一:創(chuàng)建沒有參數(shù)的存儲過程:
CREATE PROCEDURE select_all
AS
BEGIN
SELECT * from T_login1
END
GO
二:創(chuàng)建帶參數(shù)的存儲過程:
CREATE PROCEDURE select_name
@id uniqueidentifier
AS
BEGIN
SELECT * from T_login1 where PSN0001A=@id
END
GO
擴(kuò)展資料:
創(chuàng)建存儲過程的注意事項(xiàng):
1、保持事務(wù)簡短,事務(wù)越短,越不可能造成阻塞。
2、在事務(wù)中盡量避免使用循環(huán)while和游標(biāo),以及避免采用訪問大量行的語句。
3、在啟動(dòng)事務(wù)前完成所有的計(jì)算和查詢等操作,避免同一事務(wù)中交錯(cuò)讀取和更新??梢允褂帽碜兞款A(yù)先存儲數(shù)據(jù)。即存儲過程中查詢與更新使用兩個(gè)事務(wù)實(shí)現(xiàn)。
4、超時(shí)會(huì)讓事務(wù)不執(zhí)行回滾,超時(shí)后如果客戶端關(guān)閉連接sqlserver自動(dòng)回滾事務(wù)。如果不關(guān)閉,將造成數(shù)據(jù)丟失,而其他事務(wù)將在這個(gè)未關(guān)閉的連接上執(zhí)行,造成資源鎖定,甚至服務(wù)器停止響應(yīng)。
在sqlserver中執(zhí)行帶參數(shù)的存儲過程exec+空格+存儲過程名+空格+參數(shù)多個(gè)參數(shù)的話用逗號分隔傳出參數(shù)要加output例如:execP_GetIntegratedFluxOneMoment@StartTableName,@ColName,@StartTime,@StartValueoutput其中@StartTableName,@ColName,@StartTime,@StartValue都是前面已經(jīng)定義好的變量傳入?yún)?shù)也可以不用變量直接寫值也行程序中調(diào)用的話看你用什么語言了各個(gè)語言的調(diào)用方法不一樣
優(yōu)點(diǎn):
離數(shù)據(jù)最近,某些情況下可獲得更好性能
減少應(yīng)用復(fù)雜度及應(yīng)用服務(wù)器壓力
需要顯式調(diào)用,不會(huì)像觸發(fā)器那樣出現(xiàn)問題難以定位
使用方便
缺點(diǎn):增加數(shù)據(jù)庫服務(wù)器壓力。相當(dāng)于將應(yīng)用壓力轉(zhuǎn)嫁到數(shù)據(jù)庫上,而應(yīng)用服務(wù)器更容易擴(kuò)展,也就是說大部分情況下數(shù)據(jù)庫服務(wù)器資源比應(yīng)用服務(wù)器資源更加珍貴。
增加網(wǎng)絡(luò)開銷。如存儲過程存取數(shù)據(jù)量較大,會(huì)造成較大網(wǎng)絡(luò)開銷。
可移植性差。如系統(tǒng)有多中數(shù)據(jù)庫,或從某種數(shù)據(jù)庫遷移到另一種數(shù)據(jù)庫,則很有可能遇到兼容性問題。
導(dǎo)致多處存在業(yè)務(wù)邏輯。存儲過程某種程度就是將本應(yīng)放在應(yīng)用側(cè)處理的業(yè)務(wù)邏輯放到數(shù)據(jù)庫處理,這會(huì)導(dǎo)致業(yè)務(wù)邏輯存在于多個(gè)地方,增加調(diào)試維護(hù)困難。
在高并發(fā)系統(tǒng)中很可能會(huì)導(dǎo)致數(shù)據(jù)庫壓力瞬間增大。
存儲過程中的復(fù)雜運(yùn)算會(huì)大量消耗數(shù)據(jù)庫服務(wù)器資源。
總結(jié):一般情況下盡量少用或不用存儲過程,特別是在一個(gè)并發(fā)較高架構(gòu)復(fù)雜的大型系統(tǒng)中,更是要減少存儲過程的使用,業(yè)務(wù)邏輯的工作就應(yīng)該由應(yīng)用服務(wù)器處理,而不是交給數(shù)據(jù)庫。很多時(shí)候存儲過程確實(shí)可以快速解決問題,但它的維護(hù)性、擴(kuò)展性、移植性等都不好。如果你的系統(tǒng)很小,架構(gòu)比較簡單,并且開發(fā)人員對存儲過程熟悉,那么可以考慮使用存儲過程減少工作量;但隨著系統(tǒng)增加,架構(gòu)變復(fù)雜,開發(fā)人員越來越多,這時(shí)存儲過程的存在可能會(huì)導(dǎo)致更多的問題。當(dāng)然,定時(shí)ETL或報(bào)表統(tǒng)計(jì)之類的任務(wù),還是可以考慮使用存儲過程來做的。您好,SQL函數(shù)和存儲過程都是用來執(zhí)行特定任務(wù)的SQL代碼塊,但它們之間有以下區(qū)別:
1. 返回值:函數(shù)返回一個(gè)值,而存儲過程不返回任何值,可以通過輸出參數(shù)返回結(jié)果。
2. 用法:函數(shù)可以像內(nèi)置函數(shù)一樣在SQL語句中直接調(diào)用,而存儲過程必須通過EXEC語句或存儲過程名稱調(diào)用。
3. 可重用性:函數(shù)可以在多個(gè)查詢中使用,而存儲過程只能在自己的數(shù)據(jù)庫中使用。
4. 事務(wù)處理:存儲過程可以包含多個(gè)SQL語句,可以將它們作為一個(gè)事務(wù)來執(zhí)行,而函數(shù)不能。
5. 對數(shù)據(jù)庫的修改:存儲過程可以修改數(shù)據(jù)庫中的數(shù)據(jù),而函數(shù)不能。
綜上所述,函數(shù)適用于返回單個(gè)值的簡單計(jì)算,而存儲過程適用于處理復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)操作。