Toàn Vẹn Dữ Liệu và Kỹ Thuật Truy Vấn Cao Cấp

Nói đến Data Integrity là ta nói đến tính toàn vẹn của một database hay nói một cách khác là data chứa trong database phải chính xác và đáng tin cậy. Nếu data chứa trong database không chính xác ta nói database mất tính toàn vẹn (lost data integrity). Trong bài này chúng ta sẽ bàn qua các phương pháp để giữ cho database được toàn vẹn.

Các hàm SQL được DB2 cung cấp COALESCE / LENGTH / RIGHT / AVG

Hãy xem các ví dụ về một vài hàm SQL. Ví dụ đầu tiên lựa chọn tiêu đề và giá của tất cả các cuốn sách trong một bảng. Nếu giá của một tiêu đề sách là NULL, nó sẽ được hiển thị là 0.00.
SELECT TITLE, COALESCE(PRICE, 0.00) AS PRICE
FROM TITLES;


Tiếp theo, bạn sẽ thấy một ví dụ có trả về một tên công ty và số lượng các ký tự có trong tên của công ty:
SELECT COMPANYNAME, LENGTH(COMPANYNAME)
FROM CUSTOMERS


Bây giờ hãy xem làm thế nào để bạn có thể trả về năm ký tự ở tận cùng bên phải của tên của mỗi tác giả:
SELECT RIGHT(AU_FNAME, 5)
FROM AUTHORS


Ví dụ tiếp theo này, khi sử dụng bảng project, thiết lập biến chủ AVERAGE (decimal(5,2)) là mức trung bình của số nhân viên (PRSTAFF) của các dự án trong phòng ban (DEPTNO) tên là D11.

SELECT AVG(PRSTAFF)
INTO :AVERAGE
FROM PROJECT
WHERE DEPTNO = 'D11'

Cách mã hoá một chuổi nào đó (ví dụ mã hoá password)

Và đây là ví dụ về cách mã hoá một chuổi nào đó (ví dụ mã hoá password). Thực chất của hàm này là thay đổi chuổi nhập vào = chuổi khác theo một quy luật nào đó. Và quy luật ở đây là ký tự ở vị trí lẽ sẽ tăng lên 20*number, ký tự ở vị trí chẵn sẽ giảm đi 20*number.

Kiểm tra tồn tại của 1 StoreProcedure

VD1:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tên StoreProcedure]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
PRINT('OKE')
ELSE
PRINT('F')


VD2:
IF EXISTS(SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[YourStoredProcName]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[YourStoredProcName]
GO
CREATE PROCEDURE dbo.YourStoredProcName
AS
-- Logic Comes Here
GO
Update: A BETTER solution suggested by Madhivanan
IF OBJECTPROPERTY(object_id('dbo.YourStoredProcName'), N'IsProcedure') = 1
DROP PROCEDURE [dbo].[YourStoredProcName]
GO
CREATE PROCEDURE dbo.YourStoredProcName
AS-- Logic Comes Here
GO

Hàm trả về một bảng

VD1:
//tạo một hàm select các mẫu tin từ table employees
create function SelectEmployees()
returns table
as
    return  (select 
         from Employees)

//Thực thi hàm
select *
from dbo.SelectEmployees() 


VD2:


ALTER FUNCTION [dbo].[getDayListToYesterday]
(
-- Add the parameters for the function here


)
RETURNS @tblDays TABLE
(
TheDay datetime
)
as
begin
DECLARE @firstDay datetime
SET @firstDay = '2006-07-01'
WHILE (@firstDay < dateadd(dd,-1,getdate() ))
BEGIN
INSERT INTO @tblDays (TheDay) VALUES(@firstDay)
SET @firstDay = dateadd(dd, 1,@firstDay)
END
RETURN  
end