Есть одна windows crm с базой в MSSQL 2008 и вот там в таблице клиентов телефоны вносятся без какой-либо маски, т.е. просто как человек написал, так и сохранился телефон в базе. соответственно там и доп символы и пробелы и все что угодно может быть. А нужно по номеру телефона поиск провести.
Я решил добавить к таблице поле metaphone и сделать триггер
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.relation_new_triu ON dbo.relation
WITH EXECUTE AS CALLER
FOR INSERT, UPDATE
AS
BEGIN
UPDATE dbo.relation SET metaphone = dbo.ExtractInteger(phone)
END
GO
ALTER TABLE dbo.relation
DISABLE TRIGGER relation_new_triu
GO
суть его такая, что у записи добавляемо-обновляемой берется из поля телефон только цифровая часть и заносится в поле metaphone(и по нему уже ищем)
в mssql на базе пробую - все успешно. а вот CRM не нравится такой поворот, пишет ошибку Update affected more than 1 row. Как-то можно ее обойти? в триггерах не силен, к сожалению... если этот вариант никак, в голову приходит только создать некую задачу, которая будет раз в сколько-то минут обновлять данные...
по идее можно заполнить metaphone только если поле пустое, после уже поле phone редко меняется.