什么是有效的SQL Server LIKE表达式的正则表达式检查?

时间:2018-06-29 11:13:09

标签: c# sql-server regex

对于有效的SQL Server Like表达式,任何人都不会想到此检查有什么问题吗?我想也许最后一组是多余的,因为第三组涵盖了它。无论如何-欢迎提出建议或改进。

^(\S*%\S*|\S*_\S*|\S*\[\S+\]\S*|\S*\[^\S+\]\S*)$

我将此作为我的指南: Microsoft Docs for SQL Server LIKE

这是我编写的测试:

    [TestMethod]
    public void SqlLikeIsValidSqlLikeTest()
    {
        Assert.IsTrue("123%456".IsValidSqlLike());
        Assert.IsTrue("%123456".IsValidSqlLike());
        Assert.IsTrue("123456%".IsValidSqlLike());
        Assert.IsTrue("123_456".IsValidSqlLike());
        Assert.IsTrue("_123456".IsValidSqlLike());
        Assert.IsTrue("123456_".IsValidSqlLike());
        Assert.IsTrue("1_23%456".IsValidSqlLike());
        Assert.IsTrue("123%45_6".IsValidSqlLike());
        Assert.IsTrue("123%456".IsValidSqlLike());
        Assert.IsTrue("12[34]56".IsValidSqlLike());
        Assert.IsTrue("123[1-2]456".IsValidSqlLike());
        Assert.IsTrue("123[1234]456".IsValidSqlLike());
        Assert.IsTrue("123[^1234]456".IsValidSqlLike());
        Assert.IsTrue("[1234]456".IsValidSqlLike());
        Assert.IsTrue("123[1234]".IsValidSqlLike());
        Assert.IsTrue("123[^1-4]456".IsValidSqlLike());
        Assert.IsTrue("[^1-4]456".IsValidSqlLike());
        Assert.IsTrue("123[^1-4]".IsValidSqlLike());
        Assert.IsTrue("12[3-]56".IsValidSqlLike());
        Assert.IsTrue("12[^]56".IsValidSqlLike());
    }

    [TestMethod]
    public void SqlLikeIsNotValidSqlLikeTest()
    {
        Assert.IsFalse("123456".IsValidSqlLike());
        Assert.IsFalse("12[3456".IsValidSqlLike());
        Assert.IsFalse("1234]56".IsValidSqlLike());
        Assert.IsFalse("12]34[56".IsValidSqlLike());
        Assert.IsFalse("]34[56".IsValidSqlLike());
        Assert.IsFalse("34[^56".IsValidSqlLike());
        Assert.IsFalse("12]34[".IsValidSqlLike());
        Assert.IsFalse("12[]56".IsValidSqlLike());
    }

1 个答案:

答案 0 :(得分:0)

这可能不是您正在寻找的确切解决方案,而是解决问题的一种方法。

如果具有SQL连接,则可以在执行SQL命令之前使用“ SET NOEXEC ON ”命令来避免编写SQL解析器。这告诉SQL不要执行任何命令,只是评估它们是否会被执行。

SqlCommand cmd = new SqlCommand("SET NOEXEC ON", conn);
cmd.ExecuteNonQuery();
cmd = new SqlCommand(sqlToBeChecked, conn);
cmd.ExecuteNonQuery();

如果没有异常抛出,一切都很好。

或者这是其他方法 Query Validation using c#

希望对您有帮助