我有一个存储过程,其中一个步骤是删除与模式匹配的项目
--Remove the databases to exclude
DELETE t
FROM #WhichDatabase t
WHERE t.dbName like @dbExclude
但是我想要使用的模式是(在Regex中)
^(chgTRK_.*)|(.*_Play)$
如何实现传递一个字符串并解析复杂过滤器的相同目标?我知道我可以做like 'chgTRK[_]%' or like '%[_]Play'
但我受到限制,因为这是一个存储过程,并且过滤器不会总是有两个部分。
答案 0 :(得分:3)
使用表值参数(SQL Server 2008)或CSV / XML / Temp表(SQL Server 2005及更早版本)传入搜索词。
有关详情,请参阅"Arrays and Lists in SQL Server 2005 and Beyond"( 权威文章)
假设您现在已经使用列dbExclude
加载@DeleteConditions(表变量)DELETE t
FROM
#WhichDatabase t
JOIN
@DeleteConditions d ON t.dbName like dbExclude
答案 1 :(得分:0)
Dani的评论给了我一个想法,一个解决方案可能是制作一个CLR用户定义的函数来使sql支持Regex。
可以找到关于如何制作它的教程here。
答案 2 :(得分:0)
由于您正在编写存储过程,因此可以将用作输入的字符串循环(尽管表输入会更好)并对每个模式执行删除操作。