是否可以在 SQL Server 中使用 CLR 代码创建新的 T-SQL 运算符?

发布于 2024-08-28 00:18:43 字数 674 浏览 2 评论 0原文

我有一个非常简单的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

做个ˇ局外人 2024-09-04 00:18:43

不,你不能。您可以创建函数、存储过程、触发器等,但无法创建新的 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.

倚栏听风 2024-09-04 00:18:43

在此链接中,您可以了解如何在 SQLCLR 中声明运算符:
http:// msftengprodsamples.codeplex.com/wikipage?title=SS2008!User-Defined%20Data%20Type%20(UDT)%20Sample&referringTitle=Home

例如:

    public static SqlBoolean operator ==(ComplexNumber c1, ComplexNumber c2)
    {
        return c1.Equals(c2);
    }

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:

    public static SqlBoolean operator ==(ComplexNumber c1, ComplexNumber c2)
    {
        return c1.Equals(c2);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文