2013-03-04 80 views
3

我希望在WebMatrix(C#.net)環境(使用SQL Server Compact)內有一種方法可以搜索所有表和字段的值。我有一堆(如100)的表,通過WebMatrix連接,我試圖尋找一張表,其中包含我需要的一些信息。有沒有辦法在SQL Server CE中一次搜索所有表的字段?

我一直在這裏:http://blogs.thesitedoctor.co.uk/tim/2007/11/02/How+To+Search+Every+Table+And+Field+In+A+SQL+Server+Database.aspx

在這裏,在計算器:search all tables, all columns for a specific value SQL Server

還有這裏:How do I find a value anywhere in a SQL Server Database?

不幸的是我沒有看到如何在我目前的環境中實施這些方法,但我意識到可能沒有辦法做到我所要求的。

是否有或沒有辦法做我在問什麼,我至少想知道,所以我可以尋找另一種方法。

謝謝!

-----------------------------在SQL CE中運行的SQL子查詢語言---------- -------------------

SELECT * FROM UserProfile JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE (RoleId <> 6) AND Email NOT IN (SELECT Email FROM UserProfile JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE RoleId = 6) ORDER BY Email

+0

您使用的是哪個版本的SQL Server CE? – 2013-03-04 20:26:30

+0

你是如何「試圖尋找一張桌子」?你是什​​麼「不見」?這些鏈接中的每一個似乎都按照你的要求去做;你有嘗試過嗎?發生了什麼? SQL CE本身應該能夠做你想做的事情,爲什麼你必須通過WebMatrix? – 2013-03-04 20:31:41

+0

@CameronTinker我希望這回答你的問題,但我使用WebMatrix 2,如果有幫助。 – VoidKing 2013-03-04 20:31:51

回答

4

我從Syn123的回答改編的SQL和這裏是我到目前爲止有:

SELECT c.TABLE_NAME, c.COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS AS c 
     INNER JOIN INFORMATION_SCHEMA.Tables AS t ON t.TABLE_NAME = c.TABLE_NAME 
WHERE (c.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext')) AND (t.TABLE_TYPE = 'TABLE') 

我遇到的問題是,我不能做子查詢與SQL CE,因此可以」從結果集中選擇。如果您有權訪問.MDF數據庫文件,則可以編寫一個小型控制檯應用程序,以使用上述SQL返回的集合搜索特定的關鍵字。您需要一種方法來創建動態SQL,並且SQL CE不支持EXEC,所以這很困難,而且很可能不可能。

編輯:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlServerCe; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace SQLCESearch 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SearchText("Nancy"); 
      Console.ReadKey(); 
     } 

     private static void SearchText(string searchText) 
     { 
      string connStr = "Data Source=Northwind40.sdf;Persist Security Info=False;"; 
      DataTable dt = new DataTable(); 
      try 
      { 
       string sql = "SELECT c.TABLE_NAME, c.COLUMN_NAME "; 
       sql += "FROM INFORMATION_SCHEMA.COLUMNS AS c "; 
       sql += "INNER JOIN INFORMATION_SCHEMA.Tables AS t ON t.TABLE_NAME = c.TABLE_NAME "; 
       sql += "WHERE (c.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext')) AND (t.TABLE_TYPE = 'TABLE') "; 

       SqlCeDataAdapter da = new SqlCeDataAdapter(sql, connStr); 
       da.Fill(dt); 

       foreach (DataRow dr in dt.Rows) 
       { 
        string dynSQL = "SELECT [" + dr["COLUMN_NAME"] + "]"; 
        dynSQL += " FROM [" + dr["TABLE_NAME"] + "]"; 
        dynSQL += " WHERE [" + dr["COLUMN_NAME"] + "] LIKE '%" + searchText + "%'"; 

        DataTable result = new DataTable(); 
        da = new SqlCeDataAdapter(dynSQL, connStr); 
        da.Fill(result); 
        foreach (DataRow r in result.Rows) 
        { 
         Console.WriteLine("Table Name: " + dr["TABLE_NAME"]); 
         Console.WriteLine("Column Name: " + dr["COLUMN_NAME"]); 
         Console.WriteLine("Value: " + r[0]); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.Write(e.Message); 
      } 


     } 
    } 
} 

有,將打印出任何表/列包含文本的價值真正快速和骯髒的控制檯應用程序。您可以調整它以適應您的需求。我希望這有幫助。

+0

等一下,我已經完成了在SQL CE中的子查詢 – VoidKing 2013-03-04 22:54:38

+0

我會更新我的帖子,我知道的作品是定期用於Web應用程序。 – VoidKing 2013-03-04 22:55:08

+0

我很想看看你如何用SQL CE實現子查詢:)。我已經看到一些解決方案使用連接,但對於與您的數據集一樣大的數據集來說,這實際上效率很低。 – 2013-03-04 22:58:12

0

我不知道CE,但我用這個方法:

http://www.dbforums.com/microsoft-sql-server/972792-find-text-string-database.html

即第三個下來。在使用它時閱讀和理解語法,它是高度可修改的,可以按數據類型進行過濾。

+0

謝謝你的例子,請原諒這個問題if這是一個愚蠢的,但我熟悉SQL查詢(SELECT * FROM ... WHERE ...)等。在你發佈的鏈接的例子中,這只是一個SQL查詢?如果是這樣,它有一些我從未見過的關鍵字。如果不是,它是什麼語言? – VoidKing 2013-03-04 20:31:22

+0

這是一個使用遊標循環訪問SQL系統表的MS SQL查詢,我相信它可以變得更清晰。我的回答中最大的問題是它是否會在CE上運行,如果沒有,請告訴我。 – RandomUs1r 2013-03-04 20:46:38

+0

我很想嘗試這種方法,但我不確定我對語法的足夠了解以修改它以便與我的數據庫一起使用。當然,它不能像複製/粘貼一樣簡單,可以嗎? – VoidKing 2013-03-04 20:49:19

相關問題