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。執行後,存儲過程將按照定義的邏輯執行,並返回結果(如果有的話)。