Trong SQL hỗ trợ lập trình với T-SQL, bạn có thể tạo các hàm xử lý chuổi hoặc những vấn đề (đa số liên quan đến chuổi).
Với các câu lệnh cấu trúc điều kiện bạn làm vài việc kiểm tra và thao tác với dữ liệu dựa vào một điều kiện nào đó.
Tạo hàm trả về một gía trị
PHP Code:
-- =============================================
-- Create scalar function (FN)
-- =============================================
IF EXISTS (SELECT *
FROM sysobjects
WHERE name = N'<scalar_function_name, sysname, test_function>')
DROP FUNCTION <scalar_function_name, sysname, test_function>
GO
CREATE FUNCTION <scalar_function_name, sysname, test_function>
(<@param1, sysname, @p1> <data_type_for_param1, , int>,
<@param2, sysname, @p2> <data_type_for_param2, , int>)
RETURNS <function_data_type, ,int>
AS
BEGIN
<function_body, , RETURN @p1 + @p2 >
-- eg.
-- DECLARE @sum AS int
-- SELECT @sum = @p1 + @P2
-- RETURN @sum
END
GO
-- =============================================
-- Example to execute function
-- =============================================
SELECT <owner, , dbo>.<scalar_function_name, sysname, test_function>
(<value_for_@param1, , 1>,
<value_for_@param2, , 2>)
GO
Ví dụ:
PHP Code:
//tạo hàm đếm có bao nhiêu khách hàng có tuổi đã già :D (
>60) số tuổi nhập vào
create function CountAge
(
@Age int
)
returns int
as
begin
declare @intAge int
set @intAge= (select count(EmployeesID)
from Employees
where Age=@Age)
return @intAge
end
//chạy thử hàm trên
select dbo.CountAge (60) //hoặc
print dbo.CountAge (60)
Hàm trả về một table:
PHP Code:
-- =============================================
-- Create inline function (IF)
-- =============================================
IF EXISTS (SELECT *
FROM sysobjects
WHERE name = N'<inline_function_name, sysname, test_function>')
DROP FUNCTION <inline_function_name, sysname, test_function>
GO
CREATE FUNCTION <inline_function_name, sysname, test_function>
(<@param1, sysname, @p1> <data_type_for_param1, , int>,
<@param2, sysname, @p2> <data_type_for_param2, , char>)
RETURNS TABLE
AS
RETURN SELECT @p1 AS c1,
@p2 AS c2
GO
-- =============================================
-- Example to execute function
-- =============================================
SELECT *
FROM <owner, , dbo>.<inline_function_name, sysname, test_function>
(<value_for_@param1, , 1>,
<value_for_@param2, , 'a'>)
GO
Ví dụ:
PHP Code:
//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()
Ở trên là cách tạo hàm xử lý trong SQL có đối số hoặc không có, trả về giá trị hay trả về table.
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.
PHP Code:
CREATE FUNCTION ENCIPHER
(@strInput nvarchar(200),
@dt smallint=-1)
RETURNS nvarchar(200)
AS
BEGIN
Declare @str nvarchar(200)
Declare @lenStr tinyint
Declare @i tinyint
Declare @k smallint
Set @lenStr = Len(@strInput)
Set @str = ''
Set @i = 1
If (@dt = 0)
Set @dt = -1
Set @k = @dt / Abs(@dt)
While (@i <= @lenStr)
Begin
Set @str = @str + Char((Ascii(SubString(@strInput, @i, 1))+@k*20))
Set @k = -@k
Set @i = @i + 1
End
Return @str
END
//trong hàm trên chỉ cần 1 câu lệnh là quyết định, mấy câu còn lại chỉ để làm mù mắt ai đó mà thôi :D
Hàm dịch lại cách mã hoá đó thì cũng tương tự thôi (có thể viết tại SQL hoặc tại chương trình khác).
sau đây là hàm dịch lại chuổi:
Tại SQL:
PHP Code:
CREATE FUNCTION DECIPHER
(@strInput nvarchar(200),
@dt smallint=-1)
RETURNS nvarchar(200)
AS
BEGIN
Declare @str nvarchar(200)
Declare @lenStr tinyint
Declare @i tinyint
Declare @k smallint
Set @lenStr = Len(@strInput)
Set @str = ''
Set @i = 1
If (@dt = 0)
Set @dt = -1
Set @k = -@dt / Abs(@dt)
While (@i <= @lenStr)
Begin
Set @str = @str + Char((Ascii(SubString(@strInput, @i, 1))+@k*20))
Set @k = -@k
Set @i = @i + 1
End
Return @str
END
Tại C#:
PHP Code:
public String Decipher(string strInput, int dt)
{
char[] chr = strInput.ToCharArray();
String strOutput = "";
int i=0;
char c;
dt = -1;
while(i<chr.Length)
{
c= (char)((int)chr[i] + (dt*20));
++i;
dt = -dt;
strOutput += c.ToString();
}
return strOutput;
}