存儲過程output
① 存儲過程 output關鍵字是什麼意思
Out是參數,傳進、傳出,缺一不可,在存儲過程定義的時候一定要有out標識,在調用該存儲過程的時候也要有out標識 OutPut則是相當於存儲過程的返回值不用傳進,也不能傳進它是在存儲過程中定義,並且輸出的 一句話:Out相當於C#中的ref參數(傳進、傳出缺一不可),而且傳進傳出的時候都要標識為ref OutPut則為C#中的方法返回值類型,在方法定義時就已經定好了
② 存儲過程參數輸入和輸出參數有什麼作用
無論是輸入的參數還是輸出的參數,在此過程中都視為一個參數,所以一般情況下對應你定義的參數類型和個數帶入,便可調用。
存儲過程後面的是參數列表,其實存儲過程就是個方法,通過傳遞參數來指導方法完成。輸出參數相當於返回值,會帶output關鍵字。
其它參數要提前賦值,而output不需要提前賦值,只需要提供一個變數,在存儲過程執行完的時候,output類型的變數值就會修改,獲得返回值,只能通過這個方法獲得返回值,而不能像函數一樣直接返回結果。因為存儲過程是沒有返回值的。
(2)存儲過程output擴展閱讀
1、存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2、當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3、存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4、安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權。
③ 關於C#存儲結構中的output的用法
input
是輸入參數
output
是輸出參數
return
是返回值,是存儲過程中調用
return
語句返回的值,調用此語句也就代表存儲過程返回了,執行完畢
一般如果只需要存儲過程返回一個值,那麼使用return就行了
如果需要多個值,那麼就需要output參數交互取值
也就是說output和return取得的效果是相同的
④ c# 處理存儲過程output返回值的問題
因為ExecuteReader每次讀取一行,沒有和資料庫斷開連接,就像一個方法正在執行中,還沒執行return呢。所以沒值。
而ExecuteNonQuery是根據條件全查出來了放在你本地內存,就像一個方法執行完一樣,所以return也執行了,也就有值。
返回值我一般寫在添加等操作的存儲過程里,查詢沒必要即查詢結果還要在附帶一個返回值。不如只查結果,返回值不就是通過一些計算得來的嗎,完全可以在代碼中計算出來。
比如我添加的存儲過程是:
ALTER PROC [dbo].[sp_InsertModal]
@ModalName int
AS
INSERT tb_Modal(ModalName) values(@ModalName);
SELECT @@IDENTITY;
通過@@IDENTITY我能在添加一條數據後,直接拿到此數據的id數(自動增長的)。
像查詢的都寫成:
ALTER PROC [dbo].[sp_SelectLog]
@LogWork VARCHAR(50),
@StartTime DATETIME,
@EndTime DATETIME,
@UserId INT,
@ModalId INT
AS
SELECT LogId,LogWork,CreateTime,UserId,ModalId
FROM tb_Log tl
WHERE (@LogWork='' OR tl.LogWork=@LogWork)
AND (@StartTime <= tl.CreateTime AND @EndTime >= tl.CreateTime)
AND (@UserId = 0 OR tl.UserId = @UserId)
AND (@ModalId = 0 OR tl.ModalId = @ModalId)
樓主考慮一下,如果存儲過程不好解決可以試著在代碼中去處理。 因為存儲過程也是類似於程序中的方法。在存儲過程裡面處理業務邏輯和方法裡面是一樣的。但你要考慮那個更適合你的程序。
⑤ sql存儲過程中的output的作用是什麼
output的參數是輸出參數,執行完了存儲過程之後,這個參數的值會發生變化
不能理解為return,如果要類比,你可以理解為ref或者Out