預存程序(stored procedure) 是在資料庫預先擺放程式碼,以便外部程式呼叫時,可以在資料庫端先做運算,運算後再取出資料。這樣的作法有一個不可取代的好處,如果原本要運算的資料量很大,但經過運算後可以只要一點點結果,那就可以利用預存程序先行運算把資料減少,這樣傳輸到外部程式消耗的頻寬也會變少。
這個範例是只取 Left join 左側並且排除中間重疊部分的語法,見下圖
更多 join 類的經典範例請見 Visual Representation of SQL Joins
前面提到 DROP TABLE #temptable ,是刪除暫存的資料表,#和@符號分別代表存位置不同
預存程序不一定要回傳結果 (可能只是在資料庫動態新增資料)
資料表值函式和純量值函式一定會回傳結果,只是差在回傳一個table還是一個變數而已
實際用起來像這樣
這邊就跟預存程序不一樣了,因為是資料表的概念,所以直接用 select 即可
預存程序 PROCEDURE (Stored procedure) 不需要宣告回傳的型態,可以有回傳執行結果,也可以是單純insert不做回傳,宣告方式如下
這兩個函式都一定會有回傳值,所以 Create 完,下面有一個 RETURNS 要寫回傳的型態,資料表值函式就是回傳一個TABLE(類似普通sql語法查詢結果),純量值函式則是特定一個變數,可以是字串也可以是數值
範例
格式是
例如
UNIQUEIDENTIFIER 就是C#的 GUID,格式會是這樣 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ,其中每一個 x 是範圍 0-9 或 a-f 的十六進位數字。 例如,6F9619FF-8B86-D011-B42D-00C04FC964FF。
僅節錄片段,詳細可參考
這篇文章 [SQL] 使用 Stored Procedure 動態組成 SQL 查詢指令
datetime (Transact-SQL)
https://docs.microsoft.com/zh-tw/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15
#TEMPTABLE 、##TEMPTABLE 、@TEMPTABLE 區別?!
https://dotblogs.com.tw/hellouk/2010/10/07/18163
SQL - Temp Table 小技巧
https://dotblogs.com.tw/justforgood/2014/02/20/144091
[iT鐵人賽Day6]SQL Server 資料型態 char varchar nchar nvarchar
https://ithelp.ithome.com.tw/articles/10213922
[SQL] 使用 Stored Procedure 動態組成 SQL 查詢指令
https://dotblogs.com.tw/johnny/2010/01/25/13291
資料庫