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