sql存储过程返回数据集
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