如果你把儲存過程看作是批處理語句就好理解多了!
儲存過程只不過是一個帶著名稱的SQL批處理語句,如果在整個過程中需要變數時就是可以宣告,但該變數聲明後只能存活在批處理(儲存過程)的執行中,執行完畢後就會消失,這種宣告的格式就是
declare 變數名 型別
其中變數名為了與資料庫中的列名相互區別,所以變數名有一個前置@符號,比如說
declare @count int
就是將變數@count宣告為int型別的,以後可以使用變數@count作為整型變數使用。在這裡可能有一些誤解,有人認為@count是變數名,也有人認為count是變數名,而@只是一個符號,其實不管那一種理解對於宣告變數上來說是不影響的,事實上應該來說@count被稱為變數名較為合適些。
剛才說過,該變數聲明後只存活於批處理或是儲存過程的執行中而已,也就是說是一個區域性變數,其實在SQL中還有一種變數是全域性變數的,他們以@@開頭,但目前的SQL中還不允許客戶自己的宣告全域性變數,只是系統中存的。比如查詢系統版本,就可以使用select @@version的方式進行檢視的。因為不能夠宣告,所以不與declare一塊使用的情況。
其實在SQL中將變數一詞演譯的非常深,還有一類變數就是表名,列名,儲存過程等名稱,這些名稱其實也算是資料庫的全域性變數的,只要表存在,那麼表名一定會存在於master資料庫中的一個表中,列名也是一樣,這一類的變數有一個特殊,都是已經存在的boject的,所以不須要進行宣告,等於是建庫或表時進行了宣告,然後就可以了使用了,這種情況下的變數前邊是沒有@符號提示的。
所以一般情況下,我們只稱@前置的為變數,沒有前置的為資料庫相關變數,而@@是系統變數不須宣告。但只要是在使用@自定義的變數時,就必須選進行宣告,而其他的則不須要。
如果你把儲存過程看作是批處理語句就好理解多了!
儲存過程只不過是一個帶著名稱的SQL批處理語句,如果在整個過程中需要變數時就是可以宣告,但該變數聲明後只能存活在批處理(儲存過程)的執行中,執行完畢後就會消失,這種宣告的格式就是
declare 變數名 型別
其中變數名為了與資料庫中的列名相互區別,所以變數名有一個前置@符號,比如說
declare @count int
就是將變數@count宣告為int型別的,以後可以使用變數@count作為整型變數使用。在這裡可能有一些誤解,有人認為@count是變數名,也有人認為count是變數名,而@只是一個符號,其實不管那一種理解對於宣告變數上來說是不影響的,事實上應該來說@count被稱為變數名較為合適些。
剛才說過,該變數聲明後只存活於批處理或是儲存過程的執行中而已,也就是說是一個區域性變數,其實在SQL中還有一種變數是全域性變數的,他們以@@開頭,但目前的SQL中還不允許客戶自己的宣告全域性變數,只是系統中存的。比如查詢系統版本,就可以使用select @@version的方式進行檢視的。因為不能夠宣告,所以不與declare一塊使用的情況。
其實在SQL中將變數一詞演譯的非常深,還有一類變數就是表名,列名,儲存過程等名稱,這些名稱其實也算是資料庫的全域性變數的,只要表存在,那麼表名一定會存在於master資料庫中的一個表中,列名也是一樣,這一類的變數有一個特殊,都是已經存在的boject的,所以不須要進行宣告,等於是建庫或表時進行了宣告,然後就可以了使用了,這種情況下的變數前邊是沒有@符號提示的。
所以一般情況下,我們只稱@前置的為變數,沒有前置的為資料庫相關變數,而@@是系統變數不須宣告。但只要是在使用@自定義的變數時,就必須選進行宣告,而其他的則不須要。