sqlserver存储过程返回结果
Dim Cnn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Cnn_c As New ADODB.Command
Dim cnn_p As ADODB.Parameter
Cnn.ConnectionString = ConnStr'连接字符串
With Cnn
'.Provider = "MSDASQL"
.CursorLocation = adUseClient
.Open
End With
Set Cnn_c.ActiveConnection = Cnn
With Cnn_c
.CommandType = adCmdStoredProc
.CommandText = "存储过程名"
End With
Set cnn_p = Cnn_c.CreateParameter("ReTurn", adInteger, adParamReturnValue)
Cnn_c.Parameters.Append cnn_p
‘这里添加其他参数
Set Rs = Cnn_c.Execute'执行
'Cnn_c.Parameters("ReTurn")这就是返回值
Rs.close
Cnn.Close
Set cnn_p = Nothing
Set Cnn_c = Nothing
Set Rs = Nothing
Set Cnn = Nothing
2. SqlServer存储过程中用where case when无法查出有字段为空的全部数据
在编写SQL Server存储过程中,如果希望筛选出包含特定字段为空的数据,可以采用不同的逻辑结构。例如,假设需要根据电话号码(@tel)和地址(@address)两个参数来查询数据,可以使用以下逻辑:
首先检查@tel和@address是否都为空,若都为空,则直接返回所有数据:
if len(@tel) = 0 and len(@address) = 0
begin
select * from T
end
接下来分别处理@tel或@address为空的情况:
如果只有@tel为空,而@address不为空,查询条件为地址字段包含@address:
if len(@tel) = 0
begin
select * from T where address like '%'+@address+'%'
end
如果只有@address为空,而@tel不为空,查询条件为电话号码字段包含@tel:
if len(@address) = 0
begin
select * from T where tel like '%'+@tel+'%'
end
当@tel和@address都不为空时,查询条件则包含两者:
if len(@tel) <> 0 and len(@address) <> 0
begin
select * from T where tel like '%'+@tel+'%' and address like '%'+@address+'%'
end
这种逻辑结构能够确保在不同情况下,正确地返回需要的数据,同时也避免了出现字段为空的情况被遗漏。
值得注意的是,这里使用了SQL Server中的LEN函数来判断参数是否为空,通过like操作符实现模糊查询。这种方式可以有效避免空值带来的查询问题,提高查询的准确性和效率。
3. C#获取 sqlserver 存储过程返回多表数据
返回的时候用dataset就可以,比如你存储过程这样写
select * from A
select * from B
select * from C
select * from D
select * from D
在执行完存储过程后返回一个dataset
dataset ds = 执行存储过程
ds.tables[0]就是表A
ds.tables[1]就是表B
ds.tables[2]就是表C
剩下的依次类推.
4. 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
5. sql server 中 一个要输入参数和输出参数的存储过程。
1、首先我们需要打开SQL Server Managment管理工具,新建一个表。
6. sqlserver
摘自:http://database.ctocio.com.cn/analysis/465/7709465.shtml
【IT专家网独家】SQL Server用户自定义函数和存储过程有类似的功能,都可以创建捆绑SQL语句,存储在server中供以后使用。这样能够极大地提高工作效率,通过以下的各种做法可以减少编程所需的时间:
重复使用编程代码,减少编程开发时间。
隐藏SQL细节,把SQL繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言。
维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中。
乍看之下,用户自定义函数和存储过程的功能似乎一摸一样。但是,其实这两者之间还有一些虽然细微但是很重要的差异:
存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的。
l存储程序是允许用户和程序去使用存储过程,而不是允许其存取表格,这样能够增强程序安全性。与标准的SQL Server相比,存储程序限制用户行动权限方面更为细化。例如,如果你有一个货存表格,每次卖出一个货物收银员都要对表格进行更新一次(从货存中把该货品减去一件)。你可以给收银员设置权限,允许其使用decrement_item存储过程,而不是允许他们有任意修改或村表格的权限。
函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值。
总而言之,存储程序对SQL Server开发员来说是最有价值的宝物之一,用于数据库中,能够大大的提高工作效率,增强安全性,绝对超值。
7. sqlserver怎么创建存储过程
在 SQL Server 中创建存储过程的步骤如下:
一、打开存储过程创建界面
- 选择数据库:在 SQL Server Management Studio (SSMS) 中,首先选择你要创建存储过程的数据库。
- 导航到存储过程:在对象资源管理器中,展开所选数据库的“可编程性”节点,然后选择“存储过程”子节点。
- 新建存储过程:右键点击“存储过程”节点,选择“新建存储过程”选项,这将打开一个新的查询编辑器窗口,并预填充一个存储过程的模板。
二、编写存储过程
- 定义存储过程名称:在 CREATE PROCEDURE 关键字后输入存储过程的名称。存储过程名称应遵循命名规范,以便于识别和管理。
- 定义参数:在存储过程名称后的括号内定义所需的参数。参数包括输入参数、输出参数以及返回状态码(如果需要)。每个参数都应指定数据类型,并可选择性地指定默认值或是否为必填参数。
- 编写存储过程体:在 BEGIN 和 END 关键字之间编写存储过程的实际逻辑。这可以包括数据查询、数据更新、条件判断、循环等 SQL 语句。在编写过程中,可以使用 PRINT 语句来输出调试信息,以验证 SQL 语句的正确性。
三、执行并保存存储过程
- 执行存储过程:在编写完存储过程后,点击 SSMS 上方的“执行”按钮(或按 F5 键)来编译并保存存储过程。如果存储过程中有语法错误,SSMS 将显示错误消息,并允许你进行修正。
- 保存存储过程:存储过程在编译成功后将自动保存到数据库中。你可以在对象资源管理器中刷新“存储过程”节点,以查看新创建的存储过程。
四、调用存储过程
在 SQL Server 的查询框中,使用 EXEC 关键字后跟存储过程名称和必要的参数来调用存储过程。例如:EXEC 存储过程名 @参数1 = 值1, @参数2 = 值2。执行后,存储过程将按照定义的逻辑执行,并返回结果(如果有的话)。