2017-03-10 80 views
-1

我想匹配具有不同條件的值相同類型的SQL查詢的,如何匹配C#中的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,但假的第2和第3位。

我試過正則表達式,但如何找到參數所在的位置?它可以在任何地方。

是否可以用SqlScriptDom做到這一點?怎麼樣?我使用SqlScriptDom從SQL查詢中獲取表名,但是如何獲取參數?

+1

參數化查詢? –

+2

你能解釋一下「匹配查詢」是什麼意思嗎?我不明白你想要做什麼。 – Siyual

+1

你可能會問錯誤的問題[**什麼是XY問題?**](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

回答

1

好的,我不是故意選擇你的語言,但我認爲這很重要。您示例中的查詢沒有參數。他們在WHERE子句中有排除標準。這聽起來像你想要做的是比較除WHERE子句以外的所有內容的兩個查詢的文本。 ANSI SQL和T-SQL都遵循相同的約定,即在SELECT查詢中,WHERE子句位於FROM子句之後,任何GROUP BY,HAVING或ORDER BY子句之前。因此,如果您只是要分析代碼的文本,那麼您可以將它拉出來並進行比較。您可能會想到的一個問題是,SQL通常提供完成相同事情的微妙不同方式。例如,如果在您的示例中,您有< =和> =而不是<,並且>可以使用BETWEEN運算符。

我認爲你可能可以使用SqlScriptDom來做你想做的事情,但我不夠好,真的有幫助。

+0

請查看更新後的問題。有沒有圖書館已經這樣做? – Deepan

+0

我認爲可以用Microsoft.SqlServer.TransactSql.ScriptDom編寫它。我不是專家。看這裏https://the.agilesql.club/blog/Ed-Elliott/2015-11-07/Get-Started-With-The-ScriptDom –