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_namesysnametest_function>
GO

CREATE 
FUNCTION <scalar_function_namesysnametest_function
    (<@
param1sysname, @p1> <data_type_for_param1, , int>, 
     <@
param2sysname, @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_namesysnametest_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 (
>60số 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_namesysnametest_function>
GO

CREATE 
FUNCTION <inline_function_namesysnametest_function
    (<@
param1sysname, @p1> <data_type_for_param1, , int>, 
     <@
param2sysname, @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_namesysnametest_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 @1
    
If (@dt 0)
        
Set @dt = -1
    Set 
@= @dt Abs(@dt)  
    While (@
<= @lenStr)
    
Begin
        Set 
@str = @str Char((Ascii(SubString(@strInput, @i1))+@k*20))
        
Set @= -@k
        Set 
@= @
    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 @1
    
If (@dt 0)
        
Set @dt = -1
    Set 
@= -@dt Abs(@dt)  
    While (@
<= @lenStr)
    
Begin
        Set 
@str = @str Char((Ascii(SubString(@strInput, @i1))+@k*20))
        
Set @= -@k
        Set 
@= @
    End    
    
Return @str
END 
Tại C#:
PHP Code:
    public String Decipher(string strInputint 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;
    }