- 1 -
SQL Server 2000 : Bi n c c bế
Gi ng nh ngôn ng l p trình khác, vi c s d ng các bi n ư ế
c c b trong ch ng trình đi u t t y u ph i bên trong ươ ế
các ng d ng. N u không có bi n thì các ngôn ng l p trình s ế ế
tr nên không hi u qu , Transaction-SQL cũng không lo i tr
y u t này.ế
Bi n trong ch ng trình dùng đ l u tr các giá tr t m th i trong quá trình tính toánế ươ ư
các x b i sau khi thoát kh i ch ng trình ho c t t máy tính thì giá tr c a các ươ
bi n này s khôngc òn trong b nh n a.ế
Thông th ng m i m t bi n dùng đ l u tr duy nh t m t lo i d li u. Do đó khiườ ế ư
m t bi n đã xác đ nh đ l u tr d li u d ng ngày thì b n không th ép bu c bi n l u ế ư ế ư
tr các d li u d ng khác nh s ho c chu i. M i bi n c n ph i có m t tên bi n rõ ư ế ế
ràng duy nh t trong m t ph m vi đ khi c n tham chi u, b n s ch đ nh đ n tên ế ế
c a bi n đó. Trong Transaction-SQL hai lo i bi n khác nhau : bi n c c b bi n ế ế ế ế
h th ng.
Khác v i các ngôn ng l p trình, Microsoft SQL Server không khái ni m v bi n ế
toàn c c.
1/- Khai báo bi n c c b :ế
Khai báo bi n c c b vi c ch đ nh cho h th ng máy nh c p phát m t vùng nhế
bên trong b nh RAM (random access memory) c a máy tính đ ch ng trình th ươ
l u tr các giá tr t m th i trong quá trình tính toán.ư
Trong Transaction-SQL vi c s d ng bi n c n ph i đ c khai báo t ng minh ế ượ ườ
ràng, nghĩa b t bu c b n c n ph i khai báo bi n c c b tr c r i sau đó m i ế ướ
đ c phép s d ng. Đi u này s giúp cho b n hi u rõ v vi c khai báo và s d ng cácượ
bi n bên trong ch ng trình c a mình.ế ươ
Đ khai báo bi n c c b trong Transaction-SQL, b n s d ng l nh ế DECLARE v i
pháp nh sau :ư
Cú pháp :
Trong đó :
- 2 -
Tên bi n :ế tên c a bi n đ c khai báo, tên bi n luôn luôn b t đ u b ng t @. ế ượ ế
Thông th ng tên bi n ph i duy nh t trong m t ph m vi ho t đ ng.ườ ế
Ki u d li u : các ki u d li u c b n c a Microsoft SQL Server ho c các ki u ơ
d li u do ng i dùng đ nh nghĩa, dùng đ ch đ nh lo i d li u bi n s l u tr . ườ ế ư
Các ki u d li u text, ntext ho c image không đ c ch p nh n trong vi c khai báo ượ
bi n.ế
Ví d :
Đ khai báo các bi n dùng đ l u tr giá tr t ng s l ng đ t hàng, h tên nhà cung ế ư ượ
c p, ngày xu t hàng, b n s d ng l nh DECLARE nh sau :ư
Khác v i m t vài ngôn ng l p trình, b n không th gán giá tr kh i t o cho bi n lúc ế
khai báo chúng. Do đó, hành đ ng k ti p là gán giá tr c n l u tr vào bên trong bi n. ế ế ư ế
2/- Gán giá tr cho bi n : ế
Đ gán tr c n l u tr vào các bi n, b ng s d ng l nh ư ế SET ho c l nh SELECT cùng
v i phép gán (=). Thông th ng l nh ườ SET ch đ gán các giá tr c th ho c các bi u
th c tính toán ho c giá tr tính toán t các bi n khác. ế
Ví d :
Đ gán giá tr ngày 25/03/2002 vào bi n ngày xu t hàng đã đ c khai báo theo ví d ế ượ
trên, b n s d ng l nh SET nh sau :ư
L u ý :ư
Đ i v i ki u d li u d ng ngày trong Microsoft SQL Server thông th ng b n s ườ
d ng theo đ nh d ng yyyy-mm-dd đ gán giá tr vào bi n ho c vào trong c s d li u. ế ơ
Ng c l i v i l nh ượ SET, l nh SELECT dùng đ gán các giá tr đ c l y ra ho c tính ượ
toán t d li u c a các c t bên trong các b ng d li u. Ngoài ra trong cùng m t l nh
SELECT cho phép cùng lúc đ ng th i b n th gán các giá tr khác nhau t các c t
d li u vào bên trong các bi n khác nhau. ế
Ví d :
- 3 -
Đ tính ra t ng s l ng đ t hàng d li u c a đ c l y t c t SLDAT (s ượ ượ
l ng đ t) trong b ng CTDONDH, b n s d ng l nh ượ SELECT nh sau :ư
Ví d :
Đ tính ra đ ng th i giá tr s l ng đ t hàng th p nh t cao nh t, b n ch c n s ượ
d ng duy nh t m t l nh SELECT nh sau :ư
C n th n khi s d ng câu l nh SELECT đ gán giá tr c n l u tr vào các bi n b i vì ư ế
trong tr ng h p n u câu l nh ườ ế SELECT tr v nhi u dòng d li u thì ch giá tr
c a dòng d li u sau cùng m i đ c l u tr vào bi n. Đi u này làm cho b n không h ượ ư ế
bi t b i vì h th ng s không báo l i.ế
Do đó mu n tránh nh ng tr ng h p này cách t t nh t b n luôn đ m b o d li u ườ
c a mình ch tr v duy nh t m t dòng trong câu l nh SELECT, thông th ng b nườ
th s d ng m nh đ WHERE đ l c d li u theo đúng đi u ki n mình c n ho c k t ế
h p các hàm th ng kê MIN, MAX, SUM đ gi i h n s dòng tr v .
Ví d :
Đ tính ra s l ng đ t hàng cao nh t c a m t hàng u DVD Hitachi 1 đĩa" ượ
v t t là "DD01", b n s d ng l nh ư SELECT nh sau :ư
Ho c
- 4 -
Câu l nh SELECT th hai k t h p các m nh đ ế ORDER BY DESC dùng đ s p x p ế
d li u gi m d n theo c t s l ng đ t sau đó k t h p thêm m nh đ ượ ế TOP 1 đ
l y ra thông tin c a dòng đ u tiên. Khi đó d li u c a l nh SELECT s tr v m t
dòng có giá tr s l ng đ t hàng là l n nh t. ượ
M c Microsoft SQL Server có c ch t đ ng chuy n đ i ki u nh ng b n không ơ ế ư
nên s d ng cách này. Do v y khi khai báo bi n, b n c n ch đúng ki u d li u ế
bi n s l u tr .ế ư
Ví d :
Bi n @TongSoDH bên d i ki u không h p l , tuy nhiên h th ng v n th c hi nế ướ
bình th ng không thông báo l i. Bi n @TongSoDH ph i có ki u là s nguyên INT.ườ ế
3/- Xem giá tr hi n hành c a bi n : ế
Sau khi đ a các giá tr c n l u tr vào bên trong các bi n, b n cũng có th c n xem giáư ư ế
tr hi n hành bi n đang l u tr bao nhiêu. Đ làm đi u này, b n có th s d ng ế ư
l nh PRINT đ in n i dung bi n hi n đang l u tr ra màn hình. pháp c a l nh ế ư
PRINT nh sau :ư
Cú pháp :
Trong đó :
Tên bi n :ế tên c a bi n đã đ c khai báo tr c đó mà b n mu n xem giá tr hi n ế ượ ướ
hành đang l u tr . Thôngt h ng n u ki u d li u c a bi n không ph i ki u chu iư ườ ế ế
(char ho c varchar) thì b n n s d ng các hàm CAST ho c hàm CONVERT đ
chuy n v ki u d li u chu i t ng ng. ươ
• Bi u th c chu i : là m t bi u th c chu i văn b n c n in ra. Đ dài t i đa c a chu i
là 8.000 ký t .
- 5 -
Ví d :
Đ tính đ ng th i giá tr s l ng đ t hàng th p nh t cao nh t, sau đó hi n th k t ượ ế
qu ra màn hình cho b n bi t, b n s d ng l nh ế SELECTPRINT nh sau :ư
Trong ví d trên, s d ng hàm CONVERT dùng đ chuy n đ i ki u d li u c a bi n ế
@MaxSldat t ki u s nguyên (INT) sang ki u chu i (VARCHAR) và toán t (+) dùng
đ n i các chu i l i v i nhau trong câu l nh PRINT th hai.
4/- Ph m vi ho t đ ng c a bi n : ế
Trong Transaction-SQL ph m vi ho t đ ng c a bi n ch n m bên trong m t th t c ế
n i t i (stored procedure) ho c m t (batch) ch a các câu l nhbi n đã đ c khai ế ượ
báo bên trong đó.
Khái ni m v đ c xem nh m t nhóm t p h p c a m t ho c nhi u câu l nh ượ ư
Transaction-SQL s đ c biênd ch đ ng th i cùng lúc t i Microsoft SQL Server và sau ượ
đó h th ng s th c thi các câu l nh này ngay sau khi đã biên d ch thành công. Đ ch
đ nh m t lô b n s d ng t khóa GO. Đây ch là t khóa đ ch đ nh k t thúc m t lô. ế
Ví d :
B n có m t lô trong Transaction-SQL nh sau : ư
Do các câu l nh trong m t lô s đ c biên d ch t i Microsoft SQL Serverth khi ượ ế
ít nh t m t l nh bên trong l i v pháp lúc biên d ch thì s không câu l nh
nào đ c th c thi bên trong lô đó.ượ
Ví d :