Tải bản đầy đủ (.doc) (9 trang)

SQL server 2000 biến cục bộ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (163.5 KB, 9 trang )

-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ự.


-5Ví 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ụ :


-6Như ví dụ ở trên nhưng nếu bạn có bổ sung thêm lệnh INSERT mà cú pháp lệnh này bị
sai (thiếu từ khóa VALUES) thì các lệnh SELECT bên trong lô này sẽ không được thực
hiện.

Hệ thống sẽ xuất hiện thông báo lỗi :

Tuy nhiên đối với các lỗi khi thực hiện (run-time) bên trong một lô nếu trường hợp các
lỗi vi phạm ràng buộc toàn vẹn dữ liệu thì hệ thống Microsoft SQL Server chỉ ngưng lại
câu lệnh gây ra lỗi và thực hiện tiếp các lệnh kế tiếp bên trong lô.
Ví dụ :

Vẫn tiếp ví dụ trên nhưng nếu bạn có bổ sung từ khóa VALUES trong lệnh INSERT thì
lần này mặc dù chỉ có mỗi lệnh INSERT vi phạm ràng buộc toàn vẹn (giả sử trùng khóa
chính ở cột mã nhà cung cấp) nhưng các lệnh SELECT bên trong lô này vẫn được thực
hiện bình thường.

Ví dụ :
Khai báo một biến cục bộ kiểu ngày dùng để lưu ngày đặt hàng gần dây nhất dựa trên dữ
liệu của bảng DONDH tại cột Ngaydh. Sau cùng in giá trị đ1o ra màn hình.


-7-

Hệ thống sẽ hiển thị thông báo lỗi nếu bạn chèn thêm từ khóa GO ở giữa hai lệnh
SELECT và PRINT. Bởi vì khi đó các lệnh này được chia ra làm hai lô và lô thứ hai sẽ
không hiểu biến @Ngaydhgn đã được khai báo trong lô thứ nhất.
Lưu ý :
Đối với các lệnh CREATE như là CREATE DEFAULT, CREATE PROCEDURE,
CREATE RULE, CREATE TRIGGER, CREATE VIEW không được phép kết hợp với
lệnh khác trong cùng một lô.

SQL Server 2000 : Biến hệ thống
Không giống như các ngôn gnữ lập trình khác, TransactionSQL không có khái niệm về biến toàn cục. Thay vào đó hệ thống
Microsoft SQL Server sẽ cung cấp cho người lập trình danh sách
các biến hệ thống. Các biến hệ thống bên trong Microsoft SQL
Server luôn bắt đầu bằng hai chữ @@ và giá trị mà chúng đang
lưu trữ là do hệ thống Microsoft SQL Server cung cấp, người lập
trình không thể can thiệp trực tiếp để gán giá trị vào các biến hệ thống.

1/- Ý nghĩa sử dụng


Khi lập trình trong Transaction-SQL, bạn vẫn thường xuyên sử dụng giá trị của các biến
hệ thống để giúp kiểm tra kết quả thực hiện các lệnh trước đó. Thật ra các biến hệ thống
chính là các hàm đã được Microsoft SQL Server xây dựng bên trong và người lập trình
chỉ việc tra cứu các giá trị hiện thời của nó để thực hiện các xử lý tiếp theo sau đó.
Một vài biến hệ thống có giá trị thay đổi thường xuyên tùy thuộc vào các câu lệnh thực
hiện trong Transaction-SQL, tuy nhiên bên cạnh đó cũng có một vài biến hệ thống có giá
trị rất ít khi thay đổi.


-8Biến @ROWCOUNT trả về tổng số mẫu tin được thực hiện trong câu lệnh gần nhất.
Biến hệ thống này có giá trị thay đổi rất thường xuyên.

Giá trị của biến hệ thống @ROWCOUNT ở lần thứ nhất sẽ trả về tổng số mẫu tin hiện
đang có trong bảng NHACC, và giá trị của biến hệ thống @@ROWCOUNT ở lần thứ hai
sẽ trả về tổng số mẫu tin có các mã vật tư bắt đầu bằng chữ "TV" trong bảng VATTU.
Ví dụ :
Biến @@VERSION trả về phiên bản, ngày của sản phẩm Microsoft SQL Server và loại
CPU, hệ điều hành của máy chủ cài đặt Microsoft SQL Server. Biến hệ thống này có giá
trị rất ít thay đổi, giá trị của nó chỉ thay đổi khi nào bạn nâng cấp hệ thống Microsoft
SQL Server.
2/- Một số biến hệ thống thường dùng :

Ý nghĩa của một số biến hệ thống thường dùng trong Microsoft SQL Server :


-9-




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×