是否可以在 SQL Server 中使用 CLR 代码创建新的 T-SQL 运算符?
我有一个非常简单的 CLR 函数来进行正则表达式匹配,
public static SqlBoolean RegExMatch(SqlString input, SqlString pattern)
{
if (input.IsNull || pattern.IsNull)
return SqlBoolean.False;
return Regex.IsMatch(input.Value, pattern.Value, RegexOptions.IgnoreCase);
}
它允许我编写类似的 SQL 语句。
SELECT * FROM dbo.table1 WHERE dbo.RegexMatch(column1, '[0-9][A-Z]') = 1
-- match entries in col1 like 1A, 2B etc...
我只是认为重新编写该查询会很好,这样就可以像
SELECT * FROM dbo.table1 WHERE column1 REGEXLIKE '[0-9][A-Z]'
是否可以使用 CLR 代码创建新的比较运算符一样调用它。 (根据我在网络上的简短浏览,我猜测答案是否,但问一下也没什么坏处)
I have a very simple CLR Function for doing Regex Matching
public static SqlBoolean RegExMatch(SqlString input, SqlString pattern)
{
if (input.IsNull || pattern.IsNull)
return SqlBoolean.False;
return Regex.IsMatch(input.Value, pattern.Value, RegexOptions.IgnoreCase);
}
It allows me to write a SQL Statement Like.
SELECT * FROM dbo.table1 WHERE dbo.RegexMatch(column1, '[0-9][A-Z]') = 1
-- match entries in col1 like 1A, 2B etc...
I'm just thinking it would be nice to reformulate that query so it could be called like
SELECT * FROM dbo.table1 WHERE column1 REGEXLIKE '[0-9][A-Z]'
Is it possible to create new comparison operators using CLR Code. (I'm guessing from my brief glance around the web that the answer is NO, but no harm asking)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,你不能。您可以创建函数、存储过程、触发器等,但无法创建新的 T-SQL 运算符或命令。据我所知,SQL Server 2008R2 中也没有。
No you cannot. You can create functions, stored procedures, triggers and so forth - but there's no provision to create new T-SQL operators or commands. Not in SQL Server 2008R2 either, as far as I can tell.
在此链接中,您可以了解如何在 SQLCLR 中声明运算符:
http:// msftengprodsamples.codeplex.com/wikipage?title=SS2008!User-Defined%20Data%20Type%20(UDT)%20Sample&referringTitle=Home
例如:
In this link you can see how to declare operators in SQLCLR:
http://msftengprodsamples.codeplex.com/wikipage?title=SS2008!User-Defined%20Data%20Type%20(UDT)%20Sample&referringTitle=Home
For example: