當前位置:首頁 » 存儲配置 » sql存儲過程返回數據集

sql存儲過程返回數據集

發布時間: 2024-07-18 17:35:48

A. sql SERVER閲岄潰濡備綍鍦ㄥ瓨鍌ㄨ繃紼嬮噷闈㈣幏鍙栧彟涓涓瀛樺偍榪囩▼鎵榪斿洖鐨勮〃鐨勬暟鎹

棣栧厛闇瑕佺煡閬撯滃彟涓涓瀛樺偍榪囩▼鈥濈殑緇撴灉闆嗙殑鎵鏈夊垪鐨勭被鍨嬨
鍋囪鋸滃彟涓涓瀛樺偍榪囩▼鈥濈殑鍚嶅瓧鏄痵p1錛屾病鏈夊弬鏁幫紝榪斿洖鐨勭粨鏋滈泦鍏3鍒楋紝鍏ㄩ儴涓篿nt鍨嬶紝閭d箞鈥滃瓨鍌ㄨ繃紼嬧濋噷娣誨姞涓涓涓庣粨鏋滈泦鍒楁暟鐩稿悓鐨勪復鏃惰〃鎴栬〃鍙橀噺鐢ㄤ簬鎺ユ敹鈥滃彟涓涓瀛樺偍榪囩▼鈥濈殑緇撴灉闆
濡備笅
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
-- 灝唘Name鐨勫艱祴緇 @ostrUserName 鍙橀噺錛屽嵆瑕佽緭鍑虹殑鍙傛暟
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END

銆銆鍏朵腑 Create PROC 璇鍙ワ紙瀹屾暣璇鍙ヤ負Create PROCEDURE錛夌殑鎰忔濆氨鏄鍛婅瘔SQL SERVER錛岀幇鍦ㄩ渶瑕佸緩絝嬩竴涓瀛樺偍榪囩▼錛寀pGetUserName 灝辨槸瀛樺偍榪囩▼鍚嶇О錛孈intUserId 鍜 @ostrUserName 鍒嗗埆鏄璇ュ瓨鍌ㄨ繃紼嬬殑涓や釜鍙傛暟錛屾敞鎰忥紝鍦⊿QL SERVER涓錛屾墍鏈夌敤鎴峰畾涔夌殑鍙橀噺閮戒互鈥淍鈥濆紑澶達紝OUTPUT鍏抽敭瀛楄〃紺鴻繖涓鍙傛暟鏄鐢ㄦ潵杈撳嚭鐨勶紝AS涔嬪悗灝辨槸瀛樺偍榪囩▼鍐呭逛簡銆傚彧瑕佸皢浠ヤ笂浠g爜鍦ㄢ滄煡璇㈠垎鏋愬櫒鈥濋噷鎵ц屼竴嬈★紝SQL SERVER灝變細鍦ㄥ綋鍓嶆暟鎹搴撲腑鍒涘緩涓涓鍚嶄負鈥渦pGetUserName鈥濈殑瀛樺偍榪囩▼銆備綘鍙浠ユ墦寮鈥滀紒涓氱$悊鍣ㄢ濓紝閫夋嫨褰撳墠鎿嶄綔鐨勬暟鎹搴擄紝鐒跺悗鍦ㄥ乏杈圭殑鏍戝瀷鍒楄〃涓閫夋嫨鈥滃瓨鍌ㄨ繃紼嬧濓紝姝ゆ椂灝卞彲浠ュ湪鍙寵竟鐨勫垪琛ㄤ腑鐪嬪埌浣犲垰鍒氬壋寤虹殑瀛樺偍榪囩▼浜嗭紙濡傛灉娌℃湁錛屽埛鏂頒竴涓嬪嵆鍙錛夈
浜屻佸瓨鍌ㄨ繃紼嬬殑璋冪敤

銆銆涔嬪墠宸茬粡鍒涘緩浜嗕竴涓鍚嶄負鈥渦pGetUserName鈥濈殑瀛樺偍榪囩▼錛屼粠瀛楅潰鐞嗚В璇ュ瓨鍌ㄨ繃紼嬬殑鍔熻兘鏄鐢ㄦ潵鍙栧緱鏌愪竴涓鐢ㄦ埛鐨勫悕縐般傚瓨鍌ㄨ繃紼嬪緩絝嬪ソ浜嗭紝鎺ヤ笅鏉ュ氨鏄瑕佸湪搴旂敤紼嬪簭閲岃皟鐢ㄤ簡錛屼笅闈㈢湅涓涓嬪湪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

銆銆閫氳繃浠ヤ笂涓ゆワ紝宸茬粡鍙浠ュ壋寤哄拰浣跨敤綆鍗曠殑瀛樺偍榪囩▼浜嗐備笅闈㈡潵鐪嬩竴涓紼嶅井澶嶆潅鐐圭殑瀛樺偍榪囩▼錛屼互榪涗竴姝ヤ簡瑙e瓨鍌ㄨ繃紼嬬殑搴旂敤銆
涓夈佸瓨鍌ㄨ繃紼嬬殑瀹為檯搴旂敤

銆銆鐢ㄦ埛鐧誨綍鍦ˋSP欏圭洰涓緇忓父浼氫嬌鐢ㄥ埌錛屼絾浣跨敤瀛樺偍榪囩▼鏉ュ仛楠岃瘉鍙鑳戒笉澶氾紝閭d箞鍋氫緥瀛愶紝鍐欎竴涓綆鍗曠殑鐢ㄦ埛鐧誨綍楠岃瘉鐨勫瓨鍌ㄨ繃紼嬨

寮曠敤:
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

銆銆鐜板湪鎴戜滑鏉ョ湅涓涓婣SP紼嬪簭鐨勮皟鐢ㄣ

寮曠敤:
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
鈥// 鎵ц屽瓨鍌ㄨ繃紼嬶紝鍜屼互涓婂嚑涓渚嬪瓙涓嶅悓錛岃繖閲屼嬌鐢≧ecordSet鐨凮pen鏂規硶
adoRs.Open adoComm
鈥// 鏄劇ず絎涓涓鍊
Response.write adoRs.Fields(0).Value
End With
鈥// 閲婃斁瀵硅薄
Set adoRs = Nothing
Set adoComm = Nothing

B. 在SQL的存儲過程中如何如何再次利用其它存儲過程所返回的多表集結果

SQL Server要在存儲過程中返回結果集只能通過游標,沒有其他方法。
而你所說的「查詢窗中執行它們都能看到返回的一個或多個表集」這只是SQL Server提供的查詢窗口提供這種功能,而對於其他調用方式來說(比如說在另外的存儲過程中調用這個存儲過程)都是無法獲得你在查詢窗口中所看到的數據。你在這些在查詢窗口中看到的數據,起始並不是存儲過程的輸出:存儲過程只能通過output參數輸出資料,要輸出結果集只能通過游標輸出。

C. sql server存儲過程如何輸出結果集

sql server存儲過程 輸出結果集 還是比較簡單的.
直接在 存儲過程裡面執行 SQL 語句就可以了。
例如:

-- 測試返回結果集的存儲過程
CREATE PROCEDURE testProc
AS
BEGIN
SELECT 'Hello 1' AS A, 'World 1' AS B UNION ALL
SELECT 'Hello 2' AS A, 'World 2' AS B;
END

go

剩下的, 就是你用 別的開發語言, 例如 C# 什麼的 , 調用這個存儲過程, 獲取結果集了。

D. SQL存儲過程返回的兩個結果集,怎麼插入到臨時表

在接收結果的過程或代碼中循環讀取結果數據,再插入即可,又或者你可以在將要返回結果集的存儲過程中直接插入臨時表

E. 存儲過程如何把一個結果集放在一張表裡面並返回來

結果集有必要放在表裡面返回來,直接返回遊標就可以了,結果集也可以看作是張表的。

DB2的的解決方案:
1.聲明存儲過程的時候,在聲明之後添加 RESULT SETS 1,表示返回一個結果集,示例如下:
CREATE PROCEDURE YOUPRO(IN P_UserId INTEGER)
LANGUAGE SQL
RESULT SETS 1
------------------------------------------------------------------------
-- SQL 存儲過程(獲取用戶信息)
------------------------------------------------------------------------
P1: BEGIN
--聲明會使用到的參數
.... ....
... .....
2.在存儲過程中聲明一個游標,然後返回,示例如下:
DECLARE C1 CURSOR WITH RETURN FOR SELECT *FROM TABLE;
OPEN C1;

Oracle的解決方案:
1.先定義一個包,示例如下:
create or replace package CursorPackage as
type my_cursor is ref cursor;
end CursorPackage;
2.在存儲過程返回參數使用這個定義的參數,示例如下:
create or replace procere YOUPRO(P_UserId IN NUMBER, C_Return OUT CursorPackage.my_cursor)IS ... ... ..
3.存儲過程中,給返回參數賦值,示例如下:
OPEN C_Return FOR SELECT * FROM TABLE;

Sql Server的解決方案

直接返回SELECT * FROM TABLE,SqlServer中可以直接返回結果。

希望對你有幫助!

F. sql server 存儲過程如何返回一個集合啊

你需要的功能, 是不是 一個 叫做 「表值函數」 的東西?

SQLServer通過RETURNTABLE來實現。

1>CREATEFUNCTIONgetHelloWorld()
2>RETURNSTABLE
3>AS
4>RETURN
5>SELECT'Hello'ASA,'World'ASB;
6>GO
1>SELECT*FROMgetHelloWorld();
2>go
AB
----------
HelloWorld

(1行受影響)



如果返回的結果, 不是簡單的一個 SQL 語句的, 而是比較復雜的業務邏輯的

CREATEFUNCTIONgetTestTable()
RETURNS@resultTABLE(Aint,Bint,Cint)
AS
BEGIN
INSERTINTO@resultVALUES(1,2,3);
INSERTINTO@resultVALUES(4,5,6);
INSERTINTO@resultVALUES(7,8,9);
RETURN;
END;SELECT*FROMgetTestTable();

A B C
1 2 3
4 5 6
7 8 9
熱點內容
a演算法概念 發布:2024-11-25 21:24:16 瀏覽:587
jquery源碼書籍 發布:2024-11-25 21:19:50 瀏覽:803
銀行卡輸入密碼超限怎麼辦 發布:2024-11-25 21:09:07 瀏覽:958
編譯指令多發 發布:2024-11-25 20:58:17 瀏覽:751
java上傳文件到伺服器 發布:2024-11-25 20:52:47 瀏覽:741
軸加工編程 發布:2024-11-25 20:52:12 瀏覽:412
手機的媒體存儲 發布:2024-11-25 20:29:42 瀏覽:265
安卓如何關閉手機桌面 發布:2024-11-25 20:24:37 瀏覽:701
腳本也違法嗎 發布:2024-11-25 20:24:24 瀏覽:305
phpeol 發布:2024-11-25 20:16:01 瀏覽:93