intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

SQL Server 2000 : Biến cục bộ

Chia sẻ: Pham Long | Ngày: | Loại File: DOC | Số trang:9

128
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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

Chủ đề:
Lưu

Nội dung Text: SQL Server 2000 : Biến cục bộ

  1. -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. -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. -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. -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. -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ụ :
  6. -6- Như 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. -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, Transaction- SQL 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.
  8. -8- Biế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. -9-
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2