Как перевести это регулярное выражение в подобное предложение - PullRequest
2 голосов
/ 25 августа 2011

У меня есть хранимая процедура, где одним из шагов является удаление элементов, которые соответствуют шаблону

--Remove the databases to exclude
DELETE t
FROM #WhichDatabase t 
WHERE t.dbName like @dbExclude

Однако шаблон, который я хочу использовать, будет (в регулярном выражении)

^(chgTRK_.*)|(.*_Play)$

Как мне достичь той же цели - передать одну строку и разобрать сложный фильтр? Я знаю, что могу сделать like 'chgTRK[_]%' or like '%[_]Play', но я ограничен, потому что это хранимая процедура, и фильтр не всегда будет состоять из двух частей.

Ответы [ 3 ]

3 голосов
/ 25 августа 2011

Используйте параметр с табличным значением (SQL Server 2008) или таблицу CSV / XML / Temp (SQL Server 2005 и более ранние версии) для передачи условий поиска.

См. "Массивы иСписки в SQL Server 2005 и более поздних версиях " для получения дополнительной информации по этому вопросу ( полная статья по этому вопросу)

Предполагается, что вы загрузили @DeleteConditions (табличная переменная) со столбцом dbExclude

DELETE t
FROM
    #WhichDatabase t 
    JOIN
    @DeleteConditions d ON t.dbName like dbExclude
0 голосов
/ 25 августа 2011

Поскольку вы пишете хранимую процедуру, вы можете циклически перебирать строку, которую вы используете в качестве ввода (хотя вход в таблицу будет лучше), и выполнять удаление для каждого шаблона.

0 голосов
/ 25 августа 2011

Комментарий Дани дал мне идею, одним из решений может быть создание пользовательской функции CLR для поддержки SQL в Regex.

Учебное пособие можно найти здесь о том, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...