
- 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 là đi u t t y u ph i có 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 lý b i vì 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 là s ho c chu i. M i bi n c n ph i có m t tên bi n rõữ ữ ệ ạ ư ố ặ ỗ ỗ ế ầ ả ộ ế
ràng và 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 có hai lo i bi n khác nhau : bi n c c b và bi nủ ế ạ ế ế ụ ộ ế
h th ng.ệ ố
Khác v i các ngôn ng l p trình, Microsoft SQL Server không có 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 là vi c ch đ nh cho h th ng máy tí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 có 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õệ ử ụ ế ầ ả ượ ườ
ràng, có nghĩa là 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 cúớ
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 ký 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 :ể ữ ệ là 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 mà 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 là 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 có 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 mà d li u c a nó đ 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 và 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 có 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 là 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 cóườ ạ
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" có mãể ố ượ ặ ấ ủ ặ ầ
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 và 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 dù 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 màử ụ ậ ế ạ ầ ỉ ể ữ ệ
bi n s l u tr .ế ẽ ư ữ
Ví d :ụ
Bi n @TongSoDH bên d i có 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 mà bi n đang l u tr là bao nhiêu. Đ làm đi u này, b n có th s d ngị ệ ế ư ữ ể ề ạ ể ử ụ
l nh ệPRINT đ in n i dung mà bi n hi n đang l u tr ra màn hình. Cú 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 là ki u chu iư ữ ườ ế ể ữ ệ ủ ế ả ể ỗ
(char ho c varchar) thì b n 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 và 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 ả ạ ế ạ ử ụ ệ SELECT và PRINT 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 lô (batch) ch a các câu l nh mà bi n đã đ c khaiộ ạ ặ ộ ứ ệ ế ượ
báo bên trong đó.
Khái ni m v lô đ c xem nh là 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 Server vì th khi cóệ ộ ẽ ượ ị ạ ế
ít nh t m t l nh bên trong lô có l i v cú pháp lúc biên d ch thì s không có câu l nhấ ộ ệ ỗ ề ị ẽ ệ
nào đ c th c thi bên trong lô đó.ượ ự
Ví d :ụ