string mySQLQuery = "SELECT TableA.Field1, TableA.Field2,..., TableB.Field1, TableB.Field2,.... FROM TableA LEFT OUTER JOIN TableB ON TableA.Field1 = TableB.Field1"
有沒有筆直的路我可以提取查詢中的字段和表名在兩個列表?所以:
列表「字段」:
所有字段從表A,表B(和其他人我可以通過參加補充)與他們的表前綴(即使在一個簡單的只有一個表'SELECT * FROM TableA',我仍然需要'TableA。'前綴)。
所有字段從表B與它們的表前綴,通過將它們添加到通常的fieldList.Add()方式通過循環的方式。
清單 「表格」:
- 在平時tablesList.Add查詢中涉及的所有表()通過循環方式。
我的第一個辦法是讓很多子和比較,即,尋找FROM,然後修剪離開後,子,直到第一個空格,然後加入,那麼微調,那麼第一串,直到空間...,但這似乎並不正確。
重新編輯
我知道我可以從所有屬性INFORMATION_SCHEMA.COLUMNS所有字段(是後話),但問題是,對於查詢我需要知道的表。我的步驟應該是:
查詢「SELECT [田] FROM [表]」來自一個多行TextBox,所以我可以寫一個SQL查詢來獲取我想要的字段。我通過txtMyQuery.Text屬性獲取字符串。
查找SELECT查詢中的字段,並在FROM子句中查找屬於哪個表。
在字符串列表中存儲類似[Table]。[Field]的字段使用strFields.Add()方法列出strFields = new List()
然後,通過列表類似的方式重複:當然
for (int i = 0; i < fieldList.Count; i++) { string mySqlQuery = "SELECT Table_Name, Column_Name, Data_Type FROM INFORMATION_SCHEMA.COLUMNS WHERE (COLUMN_NAME + "." + TABLE_NAME) ='" + fieldList[i] + "'"; //Commit query, get results in a gridview, etc. }
解析sql與解析HTML類似。我會看看是否有可用的庫。我沒有找到一個免費的。只是:http://www.sqlparser.com/ – 2015-03-19 08:34:36
如果sql語句是'SELECT * FROM TableA',輸出應該如何?你還需要JOIN和WHERE子句中的字段,還是隻需要SELECT子句中的字段? 如果語句是'SELECT * FROM TableA INNER JOIN TableB ON(TableA.BId = TableB.Id)',會發生什麼? – 2015-03-19 08:36:28
我只需要SELECT子句中的字段將它們存儲在列表中。 WHERE,HAVING等等,即使在SELECT子句中沒有像你所建議的那樣沒有字段的引用時也是不需要的。 在SELECT * FROM表A的情況下,我需要一個輸出與TableA.Field1,TableA.Field2,TableA.Field3,... – Mario 2015-03-19 08:39:19