Ví dụ UD-91-1: Khai báo xóa mẩu tin trong bảng Imports CREATE PROC udsDeleteImports @ImportNo VARCHAR 10 AS DELETE FROM Imports WHERE ImportNo = CASE @ImportNo WHEN '' THEN ImportN
Trang 1
CREATE PROC udsViewImports
@ImportNo VARCHAR (10)
AS
SELECT * FROM Imports
WHERE
ImportNo = CASE @ImportNo
WHEN '' THEN ImportNo
ELSE @ImportNo END
Trang 2Hình UD-21-1: Liệt kê một mẩu tin
Nếu cho phép người sử dụng xóa mẩu tin trong bang Imports, bạn có
thể khai báo thủ tục nội tại như ví dụ UD-21-1
Ví dụ UD-91-1: Khai báo xóa mẩu tin trong bảng Imports
CREATE PROC udsDeleteImports
@ImportNo VARCHAR (10)
AS
DELETE FROM Imports
WHERE
ImportNo = CASE @ImportNo
WHEN '' THEN ImportNo
ELSE @ImportNo END
Ngoài ra, bạn cũng khai báo thủ tục nội tại cho phép người sử dụng
thêm mới và cập nhật mẩu tin trong bảng Imports như ví dụ UD-21-4
Ví dụ UD-21-4: Khai báo thêm và cập
CREATE PROC udsInsAndUpdImports
nhật mẩu tin]
Trang 3INSERT INTO Imports
(ImportNo, ImportBatchNo, ImportDate,
ImportTypelId, Supplierid,
DescriptionInVietnamese,
DescriptionInSecondLanguage,
ImportDiscontinued, EntryDate, UserName}
VALUES (@ImportNo, @ImportBatchNo,
@ImportDate, @ImportTypeld, @SupplierTd,
Trong phần nhập kho, chúng ta có hai bảng dữ liệu chính là Imports
và ImportDetails Để quản lý dữ liệu bảng ImportDetails, bạn khai báo thủ
tục nội tại dùng để liệt kê danh sách mẩu tin trong bang ImportDetails dua
trên ba cột dữ liệu Impor£No, Produetld và OrdinalNumber như ví dụ
Trang 4
WHERE ImportNo = @ImportNo
AND OrdinalNumber = CASE @ordinalNumber
WHEN 0 THEN OrdinalNumber
ELSE @OrdinalNumber END
AND Product ID = CASE @ProductID
WHEN '' THEN Product ID
ELSE @Product ID END
GO
Để cho phép người sử dụng liệt kê tất cả mẩu tin trong bảng
ImportDetails, bạn khai báo gọi thủ tục nội tại udsViewImportDetails như hình UD-22
00000104 P0002 ST002 50
Hình UD-22: Liệt kê mdu tin trong bang ImportDetails
Khi liệt kê một mẩu tin chỉ định trong bảng ImportDetails thì bạn
khai báo tương tự như hình UD-22-1
Hình UD-22-1: Liệt kê một mẩu tin
Do mỗi khi người sử dụng xóa mẩu tin trong bảng Imports thì những mẩu tin liên quan trong bảng ImportDetails sẽ tự động xóa theo, cho nên chúng ta chỉ khai báo thủ tục nội tại để xóa một mẩu tin trong bảng
ImportDetails với cấu trúc như ví dụ UD-22-1
Trang 5
330 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
CREATE PROC udsDeleteImportDetails
@ImportNo VARCHAR (10),
@ProductID VARCHAR (10),
@ordinalNumber TINYINT
AS
DELETE FROM ImportDetails
WHERE ImportNo = @ImportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductID = @ProductID
Go
Khi xóa một mẩu tin trong bang ImportDetails, bạn có thể khai báo
gọi thủ tục tại udsDeletelmportDetails như ví dụ UD-22-2
Vi du UD-22-2: Khai báo xóa mẩu tỉn
í dự UD-27-3: Khai báo thêm và cập nhật mẩu tỉn|
ProductID, StockId, Quantity)
VALUES (@OrdinalNumber, @ImportNo,
@ProductID, @StockId, @Quantity)
ELSE
UPDATE ImportDetails
SET StockId = @StockId,
Quantity = @Quantity
WHERE ImportNo = @ImportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductID = @ProductID
Go
Trang 6
Do mỗi lần thêm mẩu tin vào bảng ImportDetails, người sử dụng cần
cập nhật số lượng trong bảng ProductlnStocks, do dé ban cần khai báo Trigger như ví dụ UD-22-4
CREATE TRIGGER triInsImportDetails
ON ImportDetails
FOR INSERT
AS
Khai béo bién
DECLARE @ProductId VARCHAR (10}
DECLARE @StockId CHAR (3)
DECLARE @Quantity DECIMAL (18,0)
Khai báo lấy giá trị tương ứng gán uào biến
SELECT @ProductId= Productid,
@StockId = StockId, @Quantity = Quantity
UPDATE Product InStocks
SET GoodProduct InStock =
Khai bdo thém moi m@u tin uào bằng ProductinStocks
INSERT INTO Product InStocks
(ProductId, StockId, GoodProduct Instock)
VALUES (@Productid, @StockId, @Quantity?)
END
GO
Tương tự như vậy, mỗi khi người sử dụng xóa mẩu tin trong bảng
ImportDetails, bạn cẩn khai báo Trigger để trừ số lượng của sản phẩm trong kho
l9, TẾ ibang ImportDeta CREATE TRIGGER trilmportDetails
ON ImportDetails
Trang 7
DECLARE @ProductId VARCHAR (10)
DECLARE @StockId CHAR {3)
DECLARE @Quantity DECIMAL (18, 9)
SELECT @ProductId= ProductTd,
@StockTd = StockId, @Quantity = Quantity
FROM INSERTED
UPDATE ProductInStocks
SET GoodProduct InStock =
GoodProduct Instock - @Quantity
WHERE Product ld=@Productid
AND StockId=@StockId
GO
Nếu người sử đụng cập nhật số lượng nhập trong bảng ImportDetails, chúng ta cần xét hai trường hợp, nếu người sử dung cập nhật số lượng nhỏ hơn số lượng hiện hành thì chúng ta thực hiện phép toán trừ để giảm đi và
trường hợp ngược lại thì phép toán cộng để tăng thêm số lượng trong cột
GoodProductInStock của sản phẩm trong kho đó
Để làm điều này, bạn cần khai báo lại thủ tục nội tại có tên
udsInsAndUpdImportDetails thay vì sử dụng đối tượng Trigger như trường hợp thêm hay xóa mẩu tin trong bảng ImportDetails
ProductID, StockId, Quantity)
VALUES (@OrdinalNumber, @ImportNo,
@ProductID, @StockId, @Quantity)
ELSE
BEGIN
DECLARE @CurrentQtty DECIMAL (18,0)
DECLARE @UpdateQtty DECIMAL (18 20)
SELECT @Currentotty = Quantity
FROM ImportDetails
WHERE ImportNo = @ImportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductIiD = @Product ID;
Trang 8
UPDATE ImportDetails
SET StockId = @StockId,
Quantity = @Quantity
WHERE ImportNo = @ImportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductID = @Product ID;
SET @UpdateQtty = @Quantity - @CurrentQtty
UPDATE Product InStocks
SET GoodProduct InStock =
GoodProduct InStock + @UpdateQtty
WHERE Product Id=@ProductId
AND StockId=@StockId
END
GO
Nếu có nhu câu liệt kê số lượng nhập theo sản phẩm, bạn có thể khai
báo thủ tục nội tại như ví dụ UD-22-7
FROM Products P, ImportDetails D
WHERE P Product ID = D Product ID
AND D Product ID = CASE @ProductID
WHEN '' THEN D Product ID
ELSE @ProductID END
GROUP BY ProductNameInVietNamese, P.ProductID
Trang 9
334 Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
4.2 Phần xuất kho
Tương tự như phần nhập kho, khi làm việc với phần xuất kho, bạn
quan tâm các bảng dữ liệu liên quan như: ExportTypes, ExportBatchs, Exports va ExportDetails
4.2.1 Bang ExportTypes
Để làm việc với bảng ExportTypes, bạn bắt đầu khai báo thủ tục nội tại dùng để liệt kê danh sách mẩu tin như ví dụ UD-23
CREATE PROC uđsViewExportTypes
@ExportTypeld CHAR (3)
AS
SELECT * FROM Export Types
WHERE
ExportTypeld = CASE @ExportTypeId
WHEN '' THEN Export TypelId
ELSE @Export TypeId END
Nếu có nhu câu liệt kê tất cả mẩu tin trong bang ExportTypes, ban
khai báo gọi thủ tục nội tại udsViewExportTypes như hình UD-23
1 q + Export products to customers
| | 2 E02 Export products to agents
Hinh UD-23: Liét kê mẩu tin trong bảng ExportTypes
Đối với trường hợp liệt kê một mẩu tin trong bảng ExportTypes thì bạn khai báo tương tự như hình UD-23-1
Trang 10alee ExportTypelD | ExportTypeName
LS Export products to agents
Hình UD-23-1: Liệt kê một mẩu tin
Trong trường hợp xóa mẩu tin trong bảng ExportTypes, bạn có thể
khai báo thủ tục nội tại như ví dụ UD-23-1
Ví dụ UD-23-1: Khai báo xóa mẩu tin trong
CREATE PROC udsDeleteExportTypes
@Export Typeld CHAR (3)
AS
DELETE FROM ExportTypes
WHERE
Export Typeld = CASE @ExportTypeTd
WHEN '' THEN ExportTypeId
ELSE @ExportTypelId END
s bang ExportTypes
GO
Rhi xóa một mẩu tin trong bảng ExportTypes, bạn có thể khai báo
gọi thủ tục nội tại udsDeleteExportTypes như ví dụ UD-23-2
Ví dụ UD-23-4: Khai báo thêm và cập nhật mẩu tỉn|
CREATE PROC udsInsAndUpdExportTypes
Trang 11INSERT INTO ExportTypes
VALUES (@ExportTypeld, @ExportTypeName)
ELSE
UPDATE ExportTypes
SET Export TypeName = @ExportTypeName
WHERE Export Typeld = @ExportTypeId
GO
4.2.2 Bang ExportBatchs
Tương tự như bảng ImportBatchs, khi lam việc với bảng
ExportBatchs, bạn bắt đầu khai báo thủ tục nội tại dùng để liệt kê danh sách mẩu tin như ví dụ UD-24
CREATE PROC udsViewExportBatchs
@ExportBatchNo CHAR (3)
AS
SELECT * FROM ExportBatchs
WHERE
Export BatchNo = CASE @ExportBatchNo
WHEN '' THEN Export BatchNo
ELSE @ExportBatchNo END
Go
Để cho phép liệt kê tất cả mẩu tin trong bảng ExportBatchs, bạn
khai báo gọi thủ tục nội tại udsViewExportBatchs như hình UD-24
Hình UD-24: Liệt kê mẩu tin trong bdng ExportBatchs
Trang 12
Tuy nhiên, khi liệt kê một mẩu tin thì bạn khai báo tương tự như
hình UD-24-1
udsViewExportBatchs 'EBI006'
GO
GG Resuts | [7 Messages
| ExpottBatchNo ExpotBaichDale | ExportDiscontinued | EntryDate | Userttame
L1 |EB06 ^ 1 2071020000000 0 2007-09-09 080400, khang
Hình UD-24-1: Liệt kê một mẩu tin
Nếu cho phép người sử dụng xóa mẩu tin trong bảng ExportBatchs, bạn có thể khai báo thủ tục nội tại như ví dụ UD-24-1
Export BatchNo = CASE @ExportBatchNo
WHEN '' THEN ExportBatchNo
ELSE @ExportBatchNo END
GO
Nếu người sử dụng muốn xóa một mẩu tin trong bảng ExportBatchs,
họ có thể khai báo gọi thủ tục nội tại udsDeleteExportBatchs như ví dụ
Nếu bạn cung cấp giá tri réng cho tham sé @ExportBatchNo thi tha
tục nội tại sẽ xóa tất cả mẩu tin trong bảng ExportBatchs như ví dụ UD-24-3
Ví dụ UD-24-3: Khai báo xóa tất cả các mau tin|
udsDeleteExportBatchs ''
GO
Bạn cũng khai báo thủ tục nội tại cho phép người sử dụng thêm mới
và cập nhật mẩu tin trong bảng ExportBatchs như ví dụ UD-24-4
Trang 13
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
` áo thêm và e, nhật mầu tin
CREATE PROC udsInsAndUpdExportBatchs
UPDATE Export Batchs
SET ExportBatchDate = @ExportBatchDate,
@ExportNo VARCHAR (10)
AS
SELECT * FROM Exports
WHERE
ExportNo = CASE @ExportNo
WHEN '' THEN ExportNo
ELSE @ExportNo END
GO
Nếu muốn liệt kê tất cả mẩu tin trong bang Exports, ban khai báo gọi
thủ tục nội tại udsViewExports như hình UD-25
Trang 144 EX00000004 EBIDI 2007-10-13 00:00:00 £01 A0001
Ex00000005 EBID02 2007-10-14 10:00:00 E01 A0004
EX00000006 EBIO02 2071014000000 E01 A0005
E⁄00000007 EBI003 2007-10-17 00:00:00 E01 A0006
400000008 EBID03 2007-1017 00.0000 E01 A0007 EX00000003 EBI004 2007-10-18 00:00:00 E01 A0008 EX00000010 EBID05 2071019000000 E01 A0001 EX00000011 EBI005 2071019000000 E01 A0002 Ex00000012 EBID 2007-10-20 000000 E01 A0001 EX00000013 EBIUOE 2071020000000 E01 A0005
Hình UD-2ð: Liệt kê mẩu tin trong bảng Exports
hi liệt kê một mẩu tin chỉ định trong bảng Exports thì bạn khai báo
tương tự như hình UD-25-1
Hình UD-25-1: Liệt kê một mẩu tin
Nếu cho phép người sử dụng xóa mẩu tin trong bảng Exports, bạn có
thể khai báo thủ tục nội tại như ví dụ UD-2ð-1
ExportNo = CASE @ExportNo
WHEN '' THEN ExportNo
ELSE @ExportNo END
GO
Trang 15
340 Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng Rhi người sử dụng muốn xóa một mẩu tin trong bang ExportTypes,
họ có thể khai báo gọi thú tục nội tại udsDeleteExports như ví dụ UD-25-2
Ví dụ UD-25-2: Khai háo xóa một mẩu tỉn|
udsDeleteExports 'EBN000007'
GO
Nếu bạn cung cấp giá trị rỗng cho tham số ®BxportNo thì thủ tục nội
tại sẽ xóa tất cả mẩu tin trong bảng Exports như ví dụ UD-25-3
Ví dụ UD-25-3: Khai báo xóa tất cả các mẩu tin|
udsDeleteExports ''
GO
Bạn cũng khai báo thủ tục nội tai cho phép người sử dụng thêm mới
và cập nhật mẩu tín trong bắng Exports như ví du UD-25-4,
Ví dụ UD-25-4: Khai báo thêm và cập nị
CREATE PROC udsInsAndUpdExports
@Descript ionInSecondLanguage NVARCHAR (150)
GExportDiscont inued BIT
AS
IF @Flag = 0
INSERT INTO Exports
(ExportNo, ExportBatchNo, ExportDate,
ExportTypelrd, CustomerId,
DescriptionInVietnamese,
DescriptionInSecondLanguage,
Export Discontinued, EntryDate, UserName)
VALUES (@ExportNo, @ExportBatchNo,
@ExportDate, @ExportTypeld, @Customerld,
Trang 16"Tương tư như phần nhập kho, khi làm việc với phần xuất kho chúng
ta có hai bảng dữ liệu chính là Exports và ExportDetails Để quản lý dữ liệu bảng ExportDetails, bạn khai báo thủ tục nội tại dùng để liệt kê danh sách mẩu tin trong bảng ExportDetails dựa trên ba cột dữ liệu ExportNo, ProductId va OrdinalNumber như ví dụ UD-26
SELECT * FROM ExportDetails
WHERE ExportNo = @ExportNo
AND OrdinalNumber = CASE @OrdinalNumber
WHEN 0 THEN OrdinalNumber
ELSE @OrdinalNumber END
AND Product ID = CASE @ProductID
WHEN '' THEN ProductID
ELSE @Product ID END
GO
Để cho phép người sử dụng liệt kê tất cả mẩu tin trong bảng
ExportDetails, bạn khai báo gọi thủ tục nội tại udsViewExportDetails như
Hình UD-26: Liệt kê mẩu tin trong bảng ExportDetails
Rhi liệt kê một mẩu tin chỉ định trong bảng ExportDetails thi ban khai báo tương tự như hình UD-26-1
Trang 17Hình UD-26-1: Liệt bê một mẩu tin
Do mỗi khi người sử dụng xóa mẩu tin trong bảng Exports thì những mẩu tin liên quan trong bảng ExportDetails sẽ tự động xóa theo, cho nên chúng ta chỉ khai báo thủ tục nội tại để xóa một mẩu tin trong bảng
ExportDetails với cấu trúc như ví dụ UD-26-1
Ví dụ UD-26-1: Khai báo xóa mẩu tỉn trong ExportDetails|
CREATE PROC udsDeleteExportDetails
@ExportNo VARCHAR (10),
@ProductID VARCHAR (10),
@OrdinalNumber TINYINT
AS
DELETE FROM ExportDetails
WHERE ExportNo = @ExportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductID = @ProductID
GO
Khi xóa tất cả mẩu tin trong bang ExportTypes cia phiếu xuất
EX00000001, ban cé thể khai báo gọi thủ tục nội tại udsDeleteExportDetails
r Khai báo thêm và cập nhật rhẩu tỉn|
CREATE PROC udsInsAndUpdExportDetails
Trang 18ProductID, StockId, Quantity)
VALUES (@OrdinalNumber, @ExportNo,
@ProductID, @StockId, @Quantity}
ELSE
UPDATE ExportDetails
SET StockId = @StockId,
Quantity = @Quantity
WHERE ExportNo = @ExportNo
AND OrdinalNumber = @OrdinalNumber
AND ProductID = @ProductID
GO
Do mỗi lần thêm mẩu tin vào bảng ExportDetails, người sử dụng cần
cập nhật (giảm) số lượng trong bảng ProductInStocks, do đó bạn cần khai báo Trigger như ví dụ UÐ-26-4
Ví dụ UD-26-4: Khai báo Trigger cho trường hợp thêm mẩu tỉn v:
DECLARE @ProductId VARCHAR (10)
DECLARE @StockId CHAR (3}
DECLARE @Quantity DECIMAL (18,0)
SELECT @ProductId= Productid,
@StockId = StockId, @Quantity = Quantity
FROM INSERTED
UPDATE Product InStocks
SET GoodProduct InStock =
GoodProduct InStock ~ @Quantity
WHERE Product Id=@Productid