2013-03-04 76 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

相关问题