Робота з регулярними виразами в SQL Server h2>
Христофоров Юрій p>
У SQL Server 7/2000 немає вбудованої підтримки роботи з
регулярними виразами. Але SQL Server похволяет працювати з COM-об'єктами. У
VBScript (бібліотека vbscript.dll) є спеціальний об'єкт для роботи з
регулярними виразами - RegExp. p>
Нижче наведений код збереженої процедури sp_RegExpReplace,
яка дозволяє заміняти текст, що задовольняє заданим регулярним виразом
на інший заданий текст в рядку. p>
Текст процедури sp_RegExpReplace: p>
CREATE
PROCEDURE [dbo]. Sp_RegExpReplace p>
@ strIn1 varchar (8000), p>
@ strIn2 varchar (8000), p>
@ strPattern varchar (2000), p>
@ strOut varchar (8000) OUT p>
AS p>
DECLARE @ object int, @ hr int p>
DECLARE @ src varchar (255), @ desc
varchar (255) p>
--
створюємо об'єкт RegExp для роботи з регулярними виразами p>
EXEC @ hr =
sp_OACreate 'VBScript.RegExp', @ object OUT p>
p>
IF (@ hr <> 0) BEGIN p>
EXEC sp_OAGetErrorInfo @ object, @ src
OUT, @ desc OUT p>
SELECT hr = convert (varbinary (4), @ hr),
Source = @ src, Description = @ desc p>
RETURN p>
END p>
p>
EXEC @ hr = sp_OASetProperty @ object,
'Pattern', @ strPattern p>
IF (@ hr <> 0) BEGIN p>
EXEC sp_OAGetErrorInfo @ object, @ src
OUT, @ desc OUT p>
SELECT hr = convert (varbinary (4), @ hr),
Source = @ src, Description = @ desc p>
RETURN
@ hr p>
END p>
--
буде глобальна заміна p>
EXEC @ hr =
sp_OASetProperty @ object, 'Global', 1 p>
IF (@ hr <> 0) BEGIN p>
EXEC sp_OAGetErrorInfo @ object, @ src
OUT, @ desc OUT p>
SELECT hr = convert (varbinary (4), @ hr),
Source = @ src, Description = @ desc p>
RETURN @ hr p>
END p>
- виклик методу Replace p>
EXEC @ hr = sp_OAMethod @ object, 'Replace',
@ strOut OUT, @ strIn1, @ strIn2 p>
IF (@ hr <> 0) BEGIN p>
EXEC sp_OAGetErrorInfo @ object, @ src
OUT, @ desc OUT p>
SELECT hr = convert (varbinary (4), @ hr),
Source = @ src, Description = @ desc p>
RETURN @ hr p>
END p>
- видаляємо об'єкт p>
EXEC @ hr = sp_OADestroy @ object p>
IF (@ hr <> 0) BEGIN p>
EXEC sp_OAGetErrorInfo @ object, @ src
OUT, @ desc OUT p>
SELECT hr = convert (varbinary (4), @ hr),
Source = @ src, Description = @ desc p>
RETURN
@ hr p>
END p>
RETURN
0 p>
Необхідно враховувати, що користувач, від імені
якого буде запускатися наша процедура, повинен входити в роль sysadmin (це
обмеження накладають процедури sp_OACreate, sp_OASetProperty, sp_OAMethod,
sp_OADestroy). p>
протестуємо процедуру sp_RegExpReplace - видалимо з її
допомогою з заданої рядки все HTML-теги. p>
DECLARE @ strOut
varchar (8000) p>
EXEC
sp_RegExpReplace 'Це тестовий тест b>
текст ', p>
'','<.+?>', @ strOut OUT p>
SELECT @ strOut p>
GO p>
У результаті значенням змінної @ strOut буде рядок
"Це тестовий тест текст". p>
Файли SQL-скриптів додаються: sqlregexp.zip p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.activex.net.ru/
p>