如何匹配 C# 中的 SQL 查询? [关闭]

Posted

技术标签:

【中文标题】如何匹配 C# 中的 SQL 查询? [关闭]【英文标题】:How to match SQL Queries in C#? [closed] 【发布时间】:2017-07-31 23:58:06 【问题描述】:

我想匹配具有不同条件值的相同类型的 SQL 查询,

例如:

SELECT * FROM Customer Where Age > 20 AND Age < 40

SELECT * FROM Customer Where Age > 30 AND Age < 50

除了 WHERE 条件中的值(20、40、30 和 50)之外,上述两个查询都是相同的。我想识别这样的查询。它也应该与 HAVING 一起使用。它应该适用于条件中的任何值类型(int、varchar、date 等)。

基本上,我想编写一个 C# 函数,我可以向其传递 2 个查询,如果两个查询除了排除条件中的值外,它都相同,它应该返回 true。

另一个例子:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 50;

SELECT Employees.FirstName, COUNT(Orders.OrderID) AS NumberOfOrders FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY FirstName
HAVING COUNT(Orders.OrderID) > 50;

当我通过第一个和第二个查询时,它应该返回 true,但对于第二个和第三个返回 false。

我尝试使用正则表达式,但如何找到参数的位置?它可以在任何地方。

是否可以用 SqlScriptDom 做到这一点?如何?我正在使用SqlScriptDom从SQL查询中获取表名,但是如何获取参数呢?

【问题讨论】:

参数化查询? 您能解释一下“匹配查询”是什么意思吗?我不明白你要做什么。 你可能问错了问题What is the XY problem? @Siyual 请看更新后的问题 【参考方案1】:

好的,我不是要挑你的语言,但我认为这在这里很重要。您的示例中的查询没有参数。它们在 WHERE 子句中有排除标准。听起来您要做的是比较两个查询的文本,以获取除 WHERE 子句之外的所有内容。 ANSI SQL 和 T-SQL 都遵循相同的约定,即在 SELECT 查询中,WHERE 子句位于 FROM 子句之后,任何 GROUP BY、HAVING 或 ORDER BY 子句之前。因此,如果您只想分析代码文本,您可以将其拉出并以这种方式进行比较。不过,您可能会想到的一个问题是 SQL 通常提供了完成同一件事的微妙不同的方法。例如,如果在您的示例中,您有 = 而不是 ,您可以使用 BETWEEN 运算符。

我认为您可能可以使用 SqlScriptDom 来做您想做的事,但我对它的帮助还不够。

【讨论】:

请查看更新后的问题。有没有图书馆已经这样做了? 我认为可以使用 Microsoft.SqlServer.TransactSql.ScriptDom 来编写。我不是专家。看这里the.agilesql.club/blog/Ed-Elliott/2015-11-07/…

以上是关于如何匹配 C# 中的 SQL 查询? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的 SQL 查询结果填充类?

在 SQL 中使用视图是不是更好,或者我应该只在我的 C# 代码中使用查询[关闭]

c#不用SQL怎样进行模糊查询?

如何使用 C# 从 SQL 查询中检索参数

C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]

如何通过单击按钮 [C#] 执行 2 个 sql 查询